如何设置 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 ,所以 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 数量已经显而易见了。

One thought on “如何设置 nginx 和 php-fpm 的 Max open files 数量”

Leave a Reply

Your email address will not be published. Required fields are marked *

67 − 57 =