前阵子 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 积压的包?
下面是积压的截图、进程启动时间的截图
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.