如何设置 nginx 和 php-fpm 的 Max open files 数量

刚开始也和同事一样,以为 Max open files/etc/security/limits.conf 控制。

不过,同事顺便在 /etc/pam.d/su 文件中添加了session required pam_limits.so ,为了探究为什么要添加这一条规则的时候,发现此设置只有在使用 su 命令切换用户的时候有效,使用 sudo 切换用户就无效了,更不用说像 nginx 这种使用 setuid 方式切换用户的了。

我们可以通过cat /proc/<pid>/limits 来清楚地知道该进程的 resource limit 信息,我就是这样才知道我们一直以来对 nginx 修改的 Max open files 数量并没有生效)

好,错误的方法终于说完了,现在我们说正确的方法:

由于使用 setuid 方式并不会通过 PAM 来设置 Max open files ,所以 nginx 提供了 worker_rlimit_nofile 选项来自己定制 worker 的 Max open files 数量,比如,在 nginx.conf 中添加全局参数:

worker_rlimit_nofile 65535;

同样的,php-fpm 也有类似的参数

rlimit_files

只需要在 /etc/php5/fpm/php-fpm.conf 文件中添加该参数:

rlimit_files = 65535

即可设置 nginx 和 php-fpm 的 Max open files 数量。

以下为一些扩展信息:

首先,在 limits.conf 的 man 页面就说明:

limits.conf - configuration file for the pam_limits module

同时,在 pam_limits 的 man 页面也说明:

The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session …… The module must not be called by a multithreaded application.

至此,/etc/security/limits.conf 不能设定守护进程的 Max open files 数量已经显而易见了。

如何设置 nginx 和 php-fpm 的 Max open files 数量

https://robberphex.com/how-to-set-max-open-files-in-nginx-and-php-fpm/

作者

Robert Lu

发布于

2015-09-08

许可协议

评论