zoukankan      html  css  js  c++  java
  • 大量的Close_wait 发现的 too many open file 错

    突然频繁出现大量的 Close_wait,查看程序日志,发现 connection 在 accept 时报错,Too many open file。 估计程序里有这个漏洞,当 accept 时报错,没有将 connect 关闭。 这问题倒时再排查。为什么会说 too many 呢?

    文件数可以从三个维度限制分别为操作系统限制,用户态限制,以及进程限制,对于这三个维度选取最小值生效.

    查看系统所有级进程打开的文件数倒排序,发现最大进程占用也就 7000 多个

    lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

    然后获取系统级文件数限制

    cat /etc/sysctl.conf

    得到

    fs.file-max = 1000000

    查询用户级文件数限制

    cat /etc/security/limits.conf

    得到

    * soft nofile 655350

    * hard nofile 655350

    查进程的文件数限制(9928为进程id)

    cat /proc/9928/limits

    得到

    Max open files 1024 4096 files

    如上可以发现, 虽然系统及用户的文件数调大了,但是程序的仍然是一个很低的值, 这里进程的文件数一般情况下是默认继承用户级的值的,而这里却没有继承,想起该进程有 supervisor 管理。

    如果是启动的服务,则可以加入 LimitNOFILE:

    [Service]
    Type=simple
    LimitNOFILE=40960
    LimitNPROC=40960

    如果是用supervisor 管理,则需要对父进程 supervisor 放开文件数:

    vi /etc/supervisord.conf

    修改 minfds:  默认是 1024, 所以其开启的进程也变成了 1024

    minfds=51200                  ; (min. avail startup file descriptors;default 1024)
    minprocs=20000                 ; (min. avail process descriptors;default 200)
  • 相关阅读:
    JQ购物车+1-1
    [转载]DATEDIFF() 函数返回两个日期之间的时间
    [转载]js获取当前页面url网址信息
    [转载]Request获取文件路径
    JQ页面跳转
    [转载]Sql Server 日期格式化函数
    [转载]jQuery的attr()与prop()的区别
    [转载]获取验证码60秒倒计时
    [转载]JQ键盘事件
    [转载]SQL常用语句
  • 原文地址:https://www.cnblogs.com/zhenfei/p/9074937.html
Copyright © 2011-2022 走看看