如何设置worker_rlimit_nofile更高的数字以及它可以或建议的最大值是多少?
我正在尝试遵循以下建议:
大多数人遇到的第二大限制也与您的操作系统有关.打开一个shell,su给用户nginx运行,然后运行命令
ulimit -a.这些值都是nginx不能超过的限制.在许多默认系统中,打开的文件值相当有限,在我刚检查的系统上设置为1024.如果nginx遇到它达到此限制的情况,它将记录错误(24:太多打开的文件)并返回给客户一个错误.当然nginx可以处理超过1024个文件,你的操作系统也可能.您可以安全地增加此值.要执行此操作,您可以使用ulimit设置限制,也可以使用worker_rlimit_nofile定义所需的打开文件描述符限制.
来自:https://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/
Zst*_*ack 12
在设置worker_rlimit_nofile参数时,您应该同时考虑worker_connections和worker_processes。您可能希望首先使用:检查操作系统的文件描述符ulimit -Hn,ulimit -Sn这将分别为您提供每个用户的硬文件和软文件限制。您可以使用 systemctl 更改操作系统限制:
sudo sysctl -w fs.file-max=$VAL
Run Code Online (Sandbox Code Playgroud)
其中 $VAL 是您要设置的数字。然后,您可以使用以下方法进行验证:
cat /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)
如果您要自动化配置,很容易将 worker_rlimit_nofile 设置为:
worker_rlimit_nofile = worker_connections*2
Run Code Online (Sandbox Code Playgroud)
worker_processes 默认设置为 1,但是,您可以将其设置为小于或等于服务器上的内核数的数字:
grep -c ^processor /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)
编辑: 最新版本的 nginx set worker_processes: auto默认情况下,它设置为机器中可用的处理器数量。因此,重要的是要知道为什么要真正改变它。
通常,将其设置为最高值或所有可用处理器并不总是能将性能提高到一定限度:通过将其设置为 24 与 32 处理器,您可能会获得相同的性能。一些内核/TCP 堆栈参数也可以帮助缓解瓶颈。
而在微服务部署 (kubernetes) 中,在设置这些配置时考虑 pod 资源请求/限制非常重要。
要检查 nginx 产生了多少工作进程,您可以运行ps -lfC nginx。例如,在我的机器上,我得到了以下信息,因为我的机器有 12 个处理器,nginx 产生了 12 个工作进程。
$ ps -lfC nginx
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
5 S root 70488 1 0 80 0 - 14332 - Jan15 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
5 S www-data 70489 70488 0 80 0 - 14526 - Jan15 ? 00:08:24 nginx: worker process
5 S www-data 70490 70488 0 80 0 - 14525 - Jan15 ? 00:08:41 nginx: worker process
5 S www-data 70491 70488 0 80 0 - 14450 - Jan15 ? 00:08:49 nginx: worker process
5 S www-data 70492 70488 0 80 0 - 14433 - Jan15 ? 00:08:37 nginx: worker process
5 S www-data 70493 70488 0 80 0 - 14447 - Jan15 ? 00:08:44 nginx: worker process
5 S www-data 70494 70488 0 80 0 - 14433 - Jan15 ? 00:08:46 nginx: worker process
5 S www-data 70495 70488 0 80 0 - 14433 - Jan15 ? 00:08:34 nginx: worker process
5 S www-data 70496 70488 0 80 0 - 14433 - Jan15 ? 00:08:31 nginx: worker process
5 S www-data 70498 70488 0 80 0 - 14433 - Jan15 ? 00:08:46 nginx: worker process
5 S www-data 70499 70488 0 80 0 - 14449 - Jan15 ? 00:08:50 nginx: worker process
5 S www-data 70500 70488 0 80 0 - 14433 - Jan15 ? 00:08:39 nginx: worker process
5 S www-data 70501 70488 0 80 0 - 14433 - Jan15 ? 00:08:41 nginx: worker process
Run Code Online (Sandbox Code Playgroud)
要打印确切的计数,您可以使用 UID(例如,对于我的设置,它的 UUID 是 www-data。它在 nginx.conf 中配置为用户 www-data;)
$ ps -lfC nginx | awk '/nginx:/ && /www-data/{count++} END{print count}'
12
Run Code Online (Sandbox Code Playgroud)
在 kubernetes 中,nginx 默认根据 pod 的资源请求生成工作进程。例如,如果您的部署中有以下内容:
resources:
requests:
memory: 2048Mi
cpu: 2000m
Run Code Online (Sandbox Code Playgroud)
然后 nginx 会产生 2 个工作进程(2000 毫 cpu = 2 cpu)
小智 10
worker_rlimit_nofile = worker_connections*worker_processes
| 归档时间: |
|
| 查看次数: |
15121 次 |
| 最近记录: |