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

2021-05-11 15:03:31 +08:00
 zhoudaiyu

前阵子 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 积压的包?

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

1272 次点击
所在节点    Linux
11 条回复
est
2021-05-11 15:13:52 +08:00
> 当大于 1 了,就表示全连接队列满了,然后只能丢包了

不一定。这个是 backlog 可能排队几 ms 又能处理了。
zhoudaiyu
2021-05-11 15:23:00 +08:00
@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
2021-05-11 15:23:22 +08:00
@est #1 TcpExt.ListenOverflows 这个参数
est
2021-05-11 15:31:34 +08:00
@zhoudaiyu 就是 somaxconn 。系统默认最高 128 。如果你能处理的过来不一定丢包的。丢包就是直接 timeout 了。
zhoudaiyu
2021-05-11 15:48:44 +08:00
@est #4 但是已经在 ListenOverflows 计数了不是丢包了吗?
zhoudaiyu
2021-05-11 15:50:27 +08:00
@est #4 反正不管怎么样,我想看到 Recv-Q 对应的连接,不知道有啥方法
liuxu
2021-05-12 22:25:51 +08:00
zhoudaiyu
2021-05-12 22:38:06 +08:00
@liuxu #7 看过 cloudflare 的文章,但是忽略了这个脚本,太感谢了!!
liuxu
2021-05-12 22:45:42 +08:00
都搞不懂你在查什么,图一你的 Recv-Q 43 是 falcon-agent 的,我查了下是小米监控?是你小米健康 master 繁忙?

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

# sysdig 'proc.name=httpd'

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX