Nginx worker\u rlimit\u nofile

Nginx worker\u rlimit\u nofile,nginx,Nginx,如何将worker\u rlimit\u nofile设置为一个更高的数字,以及可以设置或建议设置的最大值是多少 我试图遵循以下建议: 大多数人遇到的第二大限制也是 与您的操作系统相关。打开一个shell,su向用户nginx以和的形式运行 然后运行命令ulimit-a。这些价值观都是局限性的 nginx不能超过。在许多默认系统中,“打开的文件”值为 相当有限,在一个我刚刚检查过的系统上,它被设置为1024。如果 nginx遇到这样的情况:它将记录 错误(24:打开的文件太多)并向客户端返回错误

如何将
worker\u rlimit\u nofile
设置为一个更高的数字,以及可以设置或建议设置的最大值是多少

我试图遵循以下建议:

大多数人遇到的第二大限制也是 与您的操作系统相关。打开一个shell,su向用户nginx以和的形式运行 然后运行命令
ulimit-a
。这些价值观都是局限性的 nginx不能超过。在许多默认系统中,“打开的文件”值为 相当有限,在一个我刚刚检查过的系统上,它被设置为1024。如果 nginx遇到这样的情况:它将记录 错误(24:打开的文件太多)并向客户端返回错误。 自然地,nginx可以处理超过1024个文件,而且很有可能 你的操作系统也可以。您可以安全地增加此值

为此,您可以使用ulimit设置限制,也可以使用 worker_rlimit_nofile来定义所需的打开文件描述符 限制


From:

工作者限制文件
=
工作者连接
*2个文件描述符


每个工作连接打开2个文件描述符(1个用于上游,1个用于下游)

worker\u rlimit\u nofile=worker\u connections*2


因为每个连接为客户端打开一个fd,一个为代理服务器打开.< /p> ,同时设置<代码> WorksRimiTimeNoFiel参数,您应该同时考虑<代码> WorksLoad < /C> >和 WorksUrase< /Cord>。您可能希望首先使用:
ulimit-Hn
ulimit-Sn
检查操作系统的文件描述符,这将分别为您提供每个用户的硬文件和软文件限制。您可以使用systemctl更改操作系统限制,如下所示:

sudo sysctl -w fs.file-max=$VAL
其中$VAL是您要设置的数字。然后,您可以使用以下方法进行验证:

cat /proc/sys/fs/file-max
如果您正在自动配置,很容易将worker_rlimit_nofile设置为:

worker_rlimit_nofile = worker_connections*2
默认情况下,worker_进程设置为1,但是,您可以将其设置为小于或等于服务器上的内核数:

grep -c ^processor /proc/cpuinfo
编辑: nginx setworker\u进程的最新版本默认为:auto,设置为机器中可用的处理器数量。因此,重要的是要知道为什么你真的要改变它

通常情况下,将其设置为最高值或所有可用的处理器并不总是能够提高性能超过一定的限制:通过将其设置为24对32个处理器,很可能可以获得相同的性能。一些内核/TCP堆栈参数也有助于缓解瓶颈

在微服务部署(KubNeNes)中,在配置这些配置时考虑POD资源请求/限制是非常重要的。 要检查进程nginx产生了多少工人,可以运行ps-lfC nginx。e、 在我的机器上,我得到了以下信息,因为我的机器有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数据。它在nginx.conf中配置为用户www数据;)

在kubernetes中,nginx默认情况下根据pod的资源请求生成工作进程。 e、 g如果部署中有以下内容:

resources:
  requests:
    memory: 2048Mi
    cpu: 2000m

然后nginx将产生2个工作进程(2000毫cpu=2个cpu)

即使没有100%清楚这一点,它似乎是
worker\u rlimit\u nofile
。因此,与
工作进程相乘是没有意义的。但是您可能需要乘以2,因为一个工作者每个连接需要2个文件描述符-一个用于客户端,一个用于服务文件(或上游,代理…)。根据,您不需要乘以2,因为工作者连接应该已经包括两种类型的连接(下游和上游)。不确定公式是否正确:
worker\rlimit\u nofile=(worker\u连接*worker\u进程)*2
。人们似乎普遍认为阿扎德的答案就是正确的公式。如果nginx只有一个工作进程,那么这个答案中的公式会意外地产生正确的结果。@Manuel同意,事实上,只有当工作进程设置为1时,这个公式才起作用,而这个值以前是默认值。我更新了答案,谢谢。这对一些人来说可能听起来很明显,但我要澄清的是,
worker\u connections
应该从
worker\u rlimit\u nofile
定义,而不是反过来定义,因为后者理论上等于在终端中键入
ulimit-a
给出的
open files
编号。e、 g.如果
打开文件
=1024,则
工作者限制文件
=1024,工作者连接=512;根据其他评论和网上收集的信息,我敢肯定这是不准确的。
resources:
  requests:
    memory: 2048Mi
    cpu: 2000m