如何设置nginx最大打开文件数?
How to set nginx max open files?
虽然我做了如下设置,甚至重启了服务器:
# head /etc/security/limits.conf -n2
www-data soft nofile -1
www-data hard nofile -1
# /sbin/sysctl fs.file-max
fs.file-max = 201558
具体进程的打开文件限制仍然是1024/4096:
# ps aux | grep nginx
root 983 0.0 0.0 85872 1348 ? Ss 15:42 0:00 nginx: master process /usr/sbin/nginx
www-data 984 0.0 0.2 89780 6000 ? S 15:42 0:00 nginx: worker process
www-data 985 0.0 0.2 89780 5472 ? S 15:42 0:00 nginx: worker process
root 1247 0.0 0.0 11744 916 pts/0 S+ 15:47 0:00 grep --color=auto nginx
# cat /proc/984/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 15845 15845 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 15845 15845 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
我已经尝试了所有可能的解决方案,但都没有成功。我错过了什么设置?
我在发布这个问题后几分钟就找到了答案...
# cat /etc/default/nginx
# Note: You may want to look at the following page before setting the ULIMIT.
# http://wiki.nginx.org/CoreModule#worker_rlimit_nofile
# Set the ulimit variable if you need defaults to change.
# Example: ULIMIT="-n 4096"
ULIMIT="-n 15000"
/etc/security/limit.conf
是PAM用的,应该和www-data
没有关系(是nologin用户)。
在 CentOS 上(在 7.x 上测试):
创建包含以下内容的文件 /etc/systemd/system/nginx.service.d/override.conf
:
[Service]
LimitNOFILE=65536
重新加载 systemd 守护进程:
systemctl daemon-reload
将此添加到 Nginx 配置文件中:
worker_rlimit_nofile 16384; (has to be smaller or equal to LimitNOFILE set above)
最后重启 Nginx:
systemctl restart nginx
您可以验证它是否适用于 cat /proc/<nginx-pid>/limits
。
对于 nginx,只需编辑 nginx.conf
并设置 worker_rlimit_nofile
即可更改限制。
我一开始以为是nginx自己设置的限制,结果增加了每个进程的限制:
worker_rlimit_nofile 4096;
您可以通过获取 nginx 进程 ID(来自 top -u nginx
)进行测试,然后 运行:
cat /proc/{PID}/limits
查看当前限制
CentOS 7 上的另一种方法 是 systemctl edit SERVICE_NAME
,在那里添加变量:
[Service]
LimitNOFILE=65536
保存该文件并重新加载服务。
对于那些为预系统 Debian 机器寻找答案的人,nginx init 脚本执行 /etc/default/nginx
。所以,添加行
ulimit -n 9999
将更改 nginx 守护程序的限制,而不会乱用 init 脚本。
像之前的回答一样添加 ULIMIT="-n 15000"
不适用于我的 nginx 版本。
虽然我做了如下设置,甚至重启了服务器:
# head /etc/security/limits.conf -n2
www-data soft nofile -1
www-data hard nofile -1
# /sbin/sysctl fs.file-max
fs.file-max = 201558
具体进程的打开文件限制仍然是1024/4096:
# ps aux | grep nginx
root 983 0.0 0.0 85872 1348 ? Ss 15:42 0:00 nginx: master process /usr/sbin/nginx
www-data 984 0.0 0.2 89780 6000 ? S 15:42 0:00 nginx: worker process
www-data 985 0.0 0.2 89780 5472 ? S 15:42 0:00 nginx: worker process
root 1247 0.0 0.0 11744 916 pts/0 S+ 15:47 0:00 grep --color=auto nginx
# cat /proc/984/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 15845 15845 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 15845 15845 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
我已经尝试了所有可能的解决方案,但都没有成功。我错过了什么设置?
我在发布这个问题后几分钟就找到了答案...
# cat /etc/default/nginx
# Note: You may want to look at the following page before setting the ULIMIT.
# http://wiki.nginx.org/CoreModule#worker_rlimit_nofile
# Set the ulimit variable if you need defaults to change.
# Example: ULIMIT="-n 4096"
ULIMIT="-n 15000"
/etc/security/limit.conf
是PAM用的,应该和www-data
没有关系(是nologin用户)。
在 CentOS 上(在 7.x 上测试):
创建包含以下内容的文件 /etc/systemd/system/nginx.service.d/override.conf
:
[Service]
LimitNOFILE=65536
重新加载 systemd 守护进程:
systemctl daemon-reload
将此添加到 Nginx 配置文件中:
worker_rlimit_nofile 16384; (has to be smaller or equal to LimitNOFILE set above)
最后重启 Nginx:
systemctl restart nginx
您可以验证它是否适用于 cat /proc/<nginx-pid>/limits
。
对于 nginx,只需编辑 nginx.conf
并设置 worker_rlimit_nofile
即可更改限制。
我一开始以为是nginx自己设置的限制,结果增加了每个进程的限制:
worker_rlimit_nofile 4096;
您可以通过获取 nginx 进程 ID(来自 top -u nginx
)进行测试,然后 运行:
cat /proc/{PID}/limits
查看当前限制
CentOS 7 上的另一种方法 是 systemctl edit SERVICE_NAME
,在那里添加变量:
[Service]
LimitNOFILE=65536
保存该文件并重新加载服务。
对于那些为预系统 Debian 机器寻找答案的人,nginx init 脚本执行 /etc/default/nginx
。所以,添加行
ulimit -n 9999
将更改 nginx 守护程序的限制,而不会乱用 init 脚本。
像之前的回答一样添加 ULIMIT="-n 15000"
不适用于我的 nginx 版本。