首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nginx worker_rlimit_nofile

Nginx worker_rlimit_nofile
EN

Stack Overflow用户
提问于 2016-06-02 12:23:35
回答 2查看 46K关注 0票数 23

如何将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/

EN

Stack Overflow用户

发布于 2019-10-07 18:48:51

在设置worker_rlimit_nofile参数时,应该同时考虑worker_connectionsworker_processes。您可能需要首先使用:ulimit -Hnulimit -Sn检查操作系统的文件描述符,这将分别为每个用户提供硬文件和软文件限制。您可以使用systemctl将OS限制更改为:

代码语言:javascript
运行
复制
sudo sysctl -w fs.file-max=$VAL

其中$VAL是您想要设置的数字。然后,您可以使用以下方法验证:

代码语言:javascript
运行
复制
cat /proc/sys/fs/file-max

如果您正在自动化配置,那么很容易将worker_rlimit_nofile设置为:

代码语言:javascript
运行
复制
worker_rlimit_nofile = worker_connections*2

默认情况下,worker_processes设置为1,但是,可以将其设置为小于或等于服务器上的核心数量的数字:

代码语言:javascript
运行
复制
grep -c ^processor /proc/cpuinfo

编辑:默认情况下是nginx set worker_processes: auto的最新版本,它将设置为机器中可用的处理器数量。因此,了解为什么要真正改变它是很重要的。

通常,将其设置为最高值或所有可用处理器并不一定会提高性能:很可能通过将其设置为24个和32个处理器来获得相同的性能。一些内核/TCP堆栈参数也可以帮助减轻瓶颈。

在微服务部署(kubernetes)中,在设置这些配置时考虑到pod资源请求/限制是非常重要的。

要检查处理nginx的工作人员有多少,可以运行、ps、-lfC、nginx。例如,在我的机器上,我得到了以下信息,因为我的机器有12个处理器,nginx产生了12个工作进程。

代码语言:javascript
运行
复制
$ 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;)

代码语言:javascript
运行
复制
$ ps -lfC nginx | awk '/nginx:/ && /www-data/{count++} END{print count}'
12

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

代码语言:javascript
运行
复制
resources:
  requests:
    memory: 2048Mi
    cpu: 2000m

然后,nginx将生成2个工作进程(2000兆cpu =2 cpu)。

票数 17
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37591784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档