V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

请问如何查看 ss -antlp 中处于 LISTEN 状态的 Recv-Q 不为 0 的进程对应的的连接/数据包?

  •  
  •   zhoudaiyu · 34 天前 · 387 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前阵子 apache httpd 很不稳定,有时候监控突然报警 app 的响应慢了,然后去查监控指标发现有丢包的情况,从 ss -antlp 看就是 Recv-Q 比 Send-Q 大 1 ( Send-Q 是 128,sysctl.conf 配置的),正常情况 Recv-Q 是不应该出现非 0 的情况的( LISTEN 状态),当大于 1 了,就表示全连接队列满了,然后只能丢包了。今天特意观察了一段时间这个 httpd 进程还有他的连接,发现有点意思,过段时间这个 Recv-Q 就会变大(不超过 128 ),然后很快降下来了,等降下来了立马查看 httpd 进程,发现有 1 个僵尸进程,然后再等 1S 左右这个僵尸进程被杀掉了。感觉就是有连接积压了就代表某个 httpd 的 worker 进程可能 hang 住了,然后 master 进程杀掉他,并启动一个新的进程,但是为什么变成僵尸进程杀不掉了,这个暂时没有查到,没有错误日志。我的问题就是:怎么能知道 Recv-Q 积压对应的是哪个连接?或者怎么能抓到导致 Recv-Q 积压的包?

    下面是积压的截图、进程启动时间的截图

    11 条回复    2021-05-13 10:23:08 +08:00
    est
        1
    est   34 天前
    > 当大于 1 了,就表示全连接队列满了,然后只能丢包了

    不一定。这个是 backlog 可能排队几 ms 又能处理了。
    zhoudaiyu
        2
    zhoudaiyu   34 天前
    @est #1 从监控上和 netstat -s 都可以看到丢包了

    <a href="https://sm.ms/image/f1bswS5TZqOkKhz" target="_blank"><img src="https://i.loli.net/2021/05/11/f1bswS5TZqOkKhz.png" ></a>
    zhoudaiyu
        3
    zhoudaiyu   34 天前
    @est #1 TcpExt.ListenOverflows 这个参数
    est
        4
    est   34 天前
    @zhoudaiyu 就是 somaxconn 。系统默认最高 128 。如果你能处理的过来不一定丢包的。丢包就是直接 timeout 了。
    zhoudaiyu
        5
    zhoudaiyu   34 天前
    @est #4 但是已经在 ListenOverflows 计数了不是丢包了吗?
    zhoudaiyu
        6
    zhoudaiyu   34 天前
    @est #4 反正不管怎么样,我想看到 Recv-Q 对应的连接,不知道有啥方法
    zhoudaiyu
        8
    zhoudaiyu   33 天前 via iPhone
    @liuxu #7 看过 cloudflare 的文章,但是忽略了这个脚本,太感谢了!!
    liuxu
        9
    liuxu   33 天前
    都搞不懂你在查什么,图一你的 Recv-Q 43 是 falcon-agent 的,我查了下是小米监控?是你小米健康 master 繁忙?

    图二都是 apache,ppid 也都是 root 起的 15483 没毛病啊,master 删进程都是正常现象啊,apache 也有 MaxConnectionsPerChild,每个进程最大处理请求数,过了就会 kill 掉它再起来一个新的没毛病啊
    zhoudaiyu
        10
    zhoudaiyu   33 天前 via iPhone
    @liuxu 1 你看串了是 apache 的 2 进程几十秒一死正常吗? QPS 上千都费劲单台
    liuxu
        11
    liuxu   33 天前
    @zhoudaiyu 哦 1 我看错了,那你只需要抓 apache 的 event 看看卡在哪

    # sysdig 'proc.name=httpd'
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2802 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:29 · PVG 12:29 · LAX 21:29 · JFK 00:29
    ♥ Do have faith in what you're doing.