写此文章的起因是Centos 7.x环境安装MySQL时遇到了问题,之前在Centos 6.x环境安装MySQL,在/etc/security/limits.conf文件中对打开文件nofile做了限制,重启MySQL后生效,但是在Centos 7.x环境却没用。

分析发现/etc/security/limits.conf只对pam登录用户起作用,而若通过systemd启动服务,此配置文件不起作用。对于systemd启动的服务,按照优先级(后者覆盖前者)起作用的是:

  • /etc/systemd/system.conf :设置系统级服务全局默认值(PS:需重启系统生效),如:
% vi /etc/systemd/system.conf 
...
DefaultLimitNOFILE=50000
...
  • 服务本身,如mysql进程:
% vi /usr/lib/systemd/system/mysqld.service
[Service]
...
LimitNOFILE = 20000
...
% systemctl deamon-reload
% systemctl restart mysqld

检查:

% cat /proc/13010/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max open files            20000                20000                files 
...

注意:上面只是争对系统级服务,即使用systemctl start/stop管理的服务,而对于systemctl --user管理的用户级服务(PS:非常少用,且需要特殊配置),环境变量或limits限制由如下文件限制:

  1. ~/.config/systemd/user.conf:对于有HOME的用户,可再此目录配置;
  2. /etc/systemd/user.conf:用户级别默认配置;
  3. /etc/systemd/system/user@.service.d/:对于所有用户级别管理的服务生效;
  4. /etc/systemd/system/user@<uid>.service.d:对于特定用户生效;

参考文档:


我是读书人
114 声望136 粉丝

随意记录,想着啥,写啥