zoukankan      html  css  js  c++  java
  • Nginx Too many open files

    2019/07/25 08:31:31 [crit] 15929#15929: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    2019/07/25 08:31:31 [crit] 15930#15930: accept4() failed (24: Too many open files)
    
    出现这个错误可能是由于系统的ulimit限制和nginx自身的配置有关系,先来了解下概念。
    什么是ulimit?
    ulimit命令用来限制系统用户对shell资源的访问。如果不懂什么意思,下面一段内容可以帮助你理解:
    假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。
    ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、
    常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。 简单来说,ulimit描述符可以对用户打开的文件数量进行限制(不止限制打开文件数量),让单个用户不至于打开较多的文件,导致系统奔溃或者资源不足的情况。
    注意:修改 nginx 的 max open files 有个前提,就是你已经修改好了系统的 max open files.
    修改系统中的 /etc/security/limits.conf文件中
     sudo vim /etc/security/limits.conf #在最后添加如下两行
    * soft nofile 65535
    * hard nofile 65535
    这是网上搜了很多教程,但是到此还是无法解决问题
    
    上面修改了系统的 max open files,并不代表nginx的
    先查看 nginx 的 ulimits: 
    grep 'open files' /proc/$( cat /var/run/nginx.pid )/limits
    

      

     

    发现nginx 的 max open files 并没有变化
    
    修改 nginx.service
    sudo vim /lib/systemd/system/nginx.service # (仅适用于 ubuntu)
    添加如下:
    [Service]
    LimitNOFILE=65535
    重启服务:
    sudo systemctl daemon-reload
    修改 nginx.conf,
    添加:以下两点
    worker_rlimit_nofile 65535; # (has to be smaller or equal to LimitNOFILE set above)
    events {
        worker_connections  65535;
    }
    重启 nginx:
    sudo systemctl restart nginx
    
    然后再去查看nginx的 max open files,看看是不是我们设置的65535
    grep 'open files' /proc/$( cat /var/run/nginx.pid )/limits
    到此就修改nginx的max open files结束。
    
    但是如果你已经把nginx 的max open files值改的很大了,但是还是会出现Too many open files 的错误,那说明你后端服务器处理请求的速度太慢了,或是 并发太高了。
    

      

  • 相关阅读:
    【472】proceedings 改投 journals
    【471】Keras 深度神经网络实现
    iOS websocket接入的简单使用
    Windows下安装gazebo
    详解ROS文件系统
    /home/qian/anaconda3/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
    /usr/lib/*** is not a symbolic link问题解决
    SC_leGO_LOAM安装使用
    3D激光slam开源框架汇总
    PCL——(10)PCL中使用随机采样一致性模型
  • 原文地址:https://www.cnblogs.com/c9999/p/11249386.html
Copyright © 2011-2022 走看看