zoukankan      html  css  js  c++  java
  • Linux下Too many open files问题排查与解决

    作者: Grey

    原文地址:Linux下Too many open files问题排查与解决

    Too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

    通过命令ulimit -a可以查看当前系统设置的最大句柄数是多少

    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 31767
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 31767
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    

    可以看到,open files的配置是1024,可以通过如下命令将open files增加

    ulimit -n 65535
    

    这种修改方式可以临时把文件打开数量增加到65535,但是系统重启后这个配置会失效。

    还有一种方式是修改系统的配置文件,以Ubuntu为例,配置文件默认在

    /etc/security/limits.conf
    

    在这个配置文件中增加

    * soft nofile 65535
    * hard nofile 65535
    

    如果要查看某个进程目前打开的句柄数量,可以通过如下命令:

    lsof -p 进程ID|wc -l
    

    此外,如果用supervisor托管和启动项目,会遇到这个配置无法生效的问题,原因在于supervisor会默认配置打开的句柄数量是1024,

    如果要查看某个进程最大open files,可以通过这个进程的进程号对应的limits查看

    cat /proc/进程ID/limits
    

    其中有一行是:

    Max open files	1024	1024	bytes
    

    supervisor托管的程序这一行默认都是supervisor配置的最大数量1024,这时需要手动改一下supervisor的配置文件,修改方式如下,以Ubuntu系统为例,找到supervisor的配置文件supervisord.conf

    在[supervisord]选项中,增加minfds选项的配置

    [supervisord]
    minfds=65535                  ; min. avail startup file descriptors; default 1024
    

    配置完毕后,需要重启supervisor(以systemctl为例)

    systemctl restart supervisor
    

    即可生效

    在通过:

    cat /proc/进程号/limits
    

    查看下对应进程的可open files的数量

    Max open files	65535	65535	bytes
    
  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/greyzeng/p/14297258.html
Copyright © 2011-2022 走看看