写此文章的起因是 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 限制由如下文件限制:
- ~/.config/systemd/user.conf:对于有 HOME 的用户,可再此目录配置;
- /etc/systemd/user.conf:用户级别默认配置;
- /etc/systemd/system/user@.service.d/:对于所有用户级别管理的服务生效;
- /etc/systemd/system/user@<uid>.service.d:对于特定用户生效;
参考文档:
- https://immae.eu/blog/2014/05…;
- https://bugzilla.redhat.com/s…;
- https://wiki.archlinux.org/in…;