前阵子 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 积压的包?
下面是积压的截图、进程启动时间的截图
1
est 2021-05-11 15:13:52 +08:00
> 当大于 1 了,就表示全连接队列满了,然后只能丢包了
不一定。这个是 backlog 可能排队几 ms 又能处理了。 |
2
zhoudaiyu OP @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> |
4
est 2021-05-11 15:31:34 +08:00
@zhoudaiyu 就是 somaxconn 。系统默认最高 128 。如果你能处理的过来不一定丢包的。丢包就是直接 timeout 了。
|
7
liuxu 2021-05-12 22:25:51 +08:00 1
|
9
liuxu 2021-05-12 22:45:42 +08:00
都搞不懂你在查什么,图一你的 Recv-Q 43 是 falcon-agent 的,我查了下是小米监控?是你小米健康 master 繁忙?
图二都是 apache,ppid 也都是 root 起的 15483 没毛病啊,master 删进程都是正常现象啊,apache 也有 MaxConnectionsPerChild,每个进程最大处理请求数,过了就会 kill 掉它再起来一个新的没毛病啊 |