如何将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/
发布于 2019-10-07 18:48:51
在设置worker_rlimit_nofile
参数时,应该同时考虑worker_connections
和worker_processes
。您可能需要首先使用:ulimit -Hn
和ulimit -Sn
检查操作系统的文件描述符,这将分别为每个用户提供硬文件和软文件限制。您可以使用systemctl将OS限制更改为:
sudo sysctl -w fs.file-max=$VAL
其中$VAL是您想要设置的数字。然后,您可以使用以下方法验证:
cat /proc/sys/fs/file-max
如果您正在自动化配置,那么很容易将worker_rlimit_nofile设置为:
worker_rlimit_nofile = worker_connections*2
默认情况下,worker_processes设置为1,但是,可以将其设置为小于或等于服务器上的核心数量的数字:
grep -c ^processor /proc/cpuinfo
编辑:默认情况下是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
要打印准确的计数,您可以使用UID (例如,对于我的设置,UUID是www-data )。它在nginx.conf中被配置为用户www-data;)
$ ps -lfC nginx | awk '/nginx:/ && /www-data/{count++} END{print count}'
12
在kubernetes中,在默认情况下,nginx会根据豆荚的资源请求生成工作进程。例如,如果部署中有以下内容:
resources:
requests:
memory: 2048Mi
cpu: 2000m
然后,nginx将生成2个工作进程(2000兆cpu =2 cpu)。
https://stackoverflow.com/questions/37591784
复制相似问题