![/etc/security/limits.conf 和 /proc/$PID/limits 之间的区别](https://linux22.com/image/129008/%2Fetc%2Fsecurity%2Flimits.conf%20%E5%92%8C%20%2Fproc%2F%24PID%2Flimits%20%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB.png)
我的配置/etc/security/limits.conf
是
* soft nofile 60000
* hard nofile 60000
我在ubuntu中运行nginx。重新启动ubuntu后,ulimit -n
是60000,但是
cat /proc/`ps -elf | grep nginx | grep 'master process' | awk '{print $4}'`/limits| grep 'open files'
答案是1024,为什么不是60000呢?
答案1
/etc/security/limits.conf
由 PAM 模块在登录时读取pam_limits.so
。
但是,当 nginx 在引导时启动时,它永远不会通过登录过程,因此 PAM 永远没有机会对 nginx 进程或其任何父进程进行任何 ulimit 更改。
如果您nginx
是由脚本启动的,那么您应该将 ulimit 命令添加到脚本中:
ulimit -H -n 60000
ulimit -S -n 60000
如果由.service 文件nginx
启动,请使用,并将此行添加到该文件的部分:systemd
systemctl edit nginx.service
[Service]
LimitNOFILE=60000:60000
systemctl edit some.service
将自动从树中获取原始服务文件[/usr]/lib/systemd
并将修改后的版本放在下面/etc/systemd
。中的任何文件/etc/systemd
都将覆盖树中具有相同名称的任何文件[/usr]/lib/systemd
。
它还会导致服务配置自动重新加载,因此您无需systemctl daemon-reload
手动使用。