首页 > 系统相关 >nginx调优-调大rlimit_nofile

nginx调优-调大rlimit_nofile

时间:2023-12-21 18:12:15浏览次数:34  
标签:limits max hard 调大 nofile nginx 调优 soft

前言

对于Linux用户用户组打开的进程Linux系统会对进程可占用的资源进行限制。该限制针对特定Linux用户用户组,限制范围是该Linux用户或用户组打开的所有进程

遇到的异常

nginx转发的流量比较大。因此在nginx.conf中,存在如下配置:

worker_rlimit_nofile 131072;
event {
        use epoll;
        multi_accept on;
        worker_connections 65536;
}

运行nginx之后,在error.log日志中有如下异常:

worker process xxx exited on signal 25:setrlimit(RLIMIT_NOFILE 131072)failed(1:operation not permitted)

明确问题

nofile是Linux系统的参数,用于限制用户使用的系统资源。异常提示进程尝试获取一定量的资源,但是权限不够,由此推断是系统允许进程使用的资源小于进程尝试获取的资源

查看Linux对nginx进程的nofile的限制

#查看Linux系统对nginx进程(master进程和worker进程)的max open files
cat /proc/$(cat /usr/local/nginx/logs/nginx.pid)/limits|grep open.files

得到如下输出:

                        # soft limits         # hard limits
Max open files            1024                 1024               files

可以看到Linux系统对于Max open files的hard limits是1024,小于在nginx.conf中设置的值131072。

解决问题:调整Linux对特定用户的nofile的限制

需修改下列两个文件中的其中一个。

/etc/security/limits.conf

该文件的格式如下:

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open file descriptors
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20

domain:限制范围。可以是用户用户组或所有用户。

type:可以是soft或者hard。如果进程尝试获取的资源数量超过hard limits,该进程会报错;soft limits是用户进程启动后的默认值(如果不在进程的配置文件中配置)。

item:见文件示例。要在CPU和内存未成为瓶颈时提升nginx性能,要调大启动nginx的用户的nofile和nproc。

value:具体数值。

/etc/security/limits.d/

该目录下可针对特定的item,对用户进行限制。文件内容的格式参照limits.conf,文件名的格式为“IP的最后一位-limits.conf中的item.conf”,例如20-nproc.conf。

重启机器

必须要重启,否则修改不生效!!!

验证修改是否生效

  1. 重启进程;
  2. 查看Linux系统对nginx的worker线程的资源限制,来确定修改是否生效。命令如下:
#/usr/local/nginx/logs/nginx.pid是nginx的master的进程号所在的文件
ps --ppid $(cat /usr/local/nginx/logs/nginx.pid) -o %p|sed '1d'|xargs -I{} cat /proc/{}/limits|grep open.files

注意

  1. /etc/security/limits.d的配置会覆盖/etc/security/limits.conf中的配置。
  2. 如果只修改上述配置文件,而不重启服务器,修改后的hard limits不生效
  3. 使用ulimit查到的结果,不论命令是否带有-H,都不可证明修改已生效。

ulimit命令

  1. 非root用户执行ulimit命令时如果不加“-H”,默认操作(查看和修改)soft limits。任何用户都可修改soft limits,修改后的值立即生效,同一用户再次登录时失效。
  2. root用户执行ulimit命令时如果不加“-H”,同时修改soft limits和hard limits。
  3. nofile不可以是unlimited负数或者超过Linux系统允许的上限(否则只可在单用户模式下,用对应的用户登录服务器)。
  4. 可用下面两个命令查看当前用户的nofile的soft limits和hard limits
#获取当前用户的nofile的soft limits
ulimit -Sn
#获取当前用户的nofile的hard limits
ulimit -Hn

linux内核对各参数上限的限制(待补全)

nofile:1024*1024(2.6.25内核之前)。如果是2.6.25之后的内核,使用该命令查询:

cat /proc/sys/fs/nr_open

nproc:是该命令返回的结果的一半:

cat /proc/sys/kernel/thread-max

即使设置的值超过了上限,系统也不给超出上限的资源

标签:limits,max,hard,调大,nofile,nginx,调优,soft
From: https://www.cnblogs.com/yezi2023/p/17919790.html

相关文章

  • nginx下的proxy_pass使用
    之前的文章说到了,return,rewrite的使用,以及它们的使用场景,今天再来说一种代理的使用,proxy_pass,它属于nginx下的ngx_http_proxy_module模块,没有显示的重定向(看不到30x的重定向),客户端是不知道的,是服务器内部进行转发的浏览器访问地址:http://m.9000.local/index/get,执行代码如下:$a=......
  • docker 部署 es + nginx
    ES安装elasticsearch.ymlcluster.name:"docker-cluster"node.name:"node-1"network.host:0.0.0.0discovery.seed_hosts:["127.0.0.1"]cluster.initial_master_nodes:["node-1"]#开启跨域访问支持,默认为falsehttp.cors.enabled:t......
  • nginx配置本地域名地址
    打开nginx.conf文件,修改server_name中的localhost为域名 访问本地电脑路径,C:\Windows\System32\drivers\etc,修改hosts文件。一般是没有修改权限的,还要如下操作   ......
  • 在arm架构的银河麒麟系统部署Nginx
    以下是在arm架构的银河麒麟系统上部署Nginx的详细步骤:1.创建文件夹首先,在合适的位置创建必要的文件夹。在本例中,我们将创建/opt/nginx和/usr/src/nginx两个文件夹。mkdir/opt/nginxmkdir/usr/src/nginx2.准备Nginx及其依赖包切换至/usr/src/nginx目录,并从以下地址下载......
  • nginx下的return的使用笔记
    nginx下return的功能是重定向,下面是具体用法和注意事项状态码 说明请求方式参数代码结果200正常请求,正常返回GET、POST-301永久重定向GET、POST-301永久重定向GETa=1&b=2参数可以继续传递到新地址301永久重定向POSTaa=11bb=22变成......
  • nginx相关报错
     #openresty-sreloadnginx:[warn]conflictingservername"community-gw.xxx.cn"on0.0.0.0:80,ignorednginx:[warn]conflictingservername"apusai.com"on0.0.0.0:80,ignorednginx:[warn]conflictingservername"rlnk.net"......
  • Nginx 服务器的基本原理和配置指南
    什么是Nginx?Nginx(EngineX)是一个轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器、高性能的HTTP服务器,它以高稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。什么是反向代理?反向代理(ReverseProxy)方式是指以代理服务器来接受inter......
  • Fine-Tuning: 精调大模型训练的关键步骤
    在LLM大模型训练的第三个步骤中,我们将探讨指令精调(SuperviserFine-Tuning)的重要性,以及如何利用中文指令语料库进行训练和无监督学习的应用。一、指令精调(SuperviserFine-Tuning)指令精调是一种训练LLM大模型的优化方法,旨在提高模型对于特定任务的性能。该方法的核心思想是将预训练......
  • Nginx+keepalived实现高可用负载群集
    Nginx+keepalived实现方式使用Nginx作为负载调度器,通过四层代理转发给web服务器处理请求,实现负载均衡; 在Nginx调度器上配置脚本监控(健康检查),实现主备热备份,当主失效切换至备工作。部署案列Web服务器1:192.168.19.23(VIP192.168.19.200)Web服务器2:192.168.19.28(VIP192.168......
  • 搭建lnmp环境-nginx关联php-fpm (第三步)
     永久关闭防火墙sudosystemctlstopfirewalldsudosystemctldisablefirewall 安装php扩展 php-fpmyum-y installphp-fpm systemctlstart php-fpm.servicesystemctlenable php-fpm.service  修改php-fpm用户/etc/php-fpm.d/www.conf新增用户:www(userad......