• socket fd 泄露分析


    前提:

    首先,了解: /proc/net/sockstat , 和 ss -s 命令

    cat /proc/net/sockstat
    sockets: used 294
    TCP: inuse 35 orphan 0 tw 0 alloc 45 mem 1
    UDP: inuse 13 mem 2
    UDPLITE: inuse 0
    RAW: inuse 4
    FRAG: inuse 0 memory 0
    sockets: used:已使用的所有协议套接字总量
    TCP: inuse:正在使用(正在侦听)的TCP套接字数量。其值≤ netstat –lnt | grep ^tcp | wc –l
    TCP: orphan:无主(不属于任何进程)的TCP连接数(无用、待销毁的TCP socket数)
    TCP: tw:等待关闭的TCP连接数。其值等于netstat –ant | grep TIME_WAIT | wc –l
    TCP:alloc(allocated):已分配(已建立、已申请到sk_buff)的TCP套接字数量。其值等于netstat –ant | grep ^tcp | wc –l
    TCP:mem:套接字缓冲区使用量(单位不详。用scp实测,速度在4803.9kB/s时:其值=11,netstat –ant 中相应的22端口的Recv-Q=0,Send-Q≈400)
    UDP:inuse:正在使用的UDP套接字数量
    RAW:
    FRAG:使用的IP段数量
    
    

    问题

    大量的没有关闭的socket fd

    如何找到异常的进程?

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

    但是,当问题很严重的时候,这个命令几乎也执行不出来。

    可以直接试试:

    ll /proc/*/fd/
    

    看看卡在这里。

    需要注意:

    fd资源的限制:

    系统层面的限制: /proc/sys/fs/file-max

    man proc,可得到file-max的描述:
    /proc/sys/fs/file-max
              This  file defines a system-wide limit on the number of open files for all processes.  (See
              also setrlimit(2),  which  can  be  used  by  a  process  to  set  the  per-process  limit,
              RLIMIT_NOFILE,  on  the  number  of  files it may open.)  If you get lots of error messages
              about running out of file handles, try increasing this value:
    

    单个进程的限制:

    ulimit -n 
    
    muahao@aliyun.com
  • 相关阅读:
    理解dajngo ORM查询中select_related的作用
    Django 模型层 Meta 选项详解
    token和session的区别
    Python 爬虫 urllib、urllib2、urllib3用法及区别
    linux里面访问一个链接的方法
    scrapy-redis实现全站分布式数据爬取
    linux shell 操作 mysql命令(不进入mysql操作界面)
    后台+下载(wget)+多个下载url
    维基下载页面说明(指南)
    pytorch --Rnn语言模型(LSTM,BiLSTM) -- 《Recurrent neural network based language model》
  • 原文地址:https://www.cnblogs.com/muahao/p/15190174.html
Copyright © 2020-2023  润新知