您好,春哥! 目前遇到个困扰好几个月的问题,一直在跟踪没找到原因。
问题现象: 请求量也就1w左右qps, 发现线上偶尔会出现listen overflow 队列满的情况,并且accept比较低。期待您的回复, 非常感谢!
附件中采集了cpu用户态和内核态的火焰图 sample-bt
通过您提供的工具 openresty-systemtap-toolkit 分析的情况如下:
./tcp-accept-queue --port=80 --distr --time=5
SYN queue length limit: 256
Accept queue length limit: 128
=== SYN Queue ===
min/avg/max: 0/5/27
value |-------------------------------------------------- count
0 | 71
1 |@ 536
2 |@@@@@@@@@@@@@@@ 5166
4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16537
8 |@@@@@@@@@ 3202
16 |@ 337
32 | 0
64 | 0
=== Accept Queue ===
min/avg/max: 0/0/30
value |-------------------------------------------------- count
0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 23784
1 |@@@ 1851
2 | 140
4 | 24
8 | 27
16 | 23
32 | 0
64 | 0
./tcp-recv-queue --dport=8000 --time=5
=== Distribution of First-In-First-Out Latency (us) in TCP Receive Queue ===
min/avg/max: 1/69/499959
value |-------------------------------------------------- count
0 | 0
1 | 10
2 | 89
4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 27323
8 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16457
16 |@@@@@@@@@@@@@@@@ 9232
32 |@@@@@@@@ 4908
64 |@@@ 1682
128 | 230
256 | 84
512 | 166
1024 | 244
2048 | 288
4096 | 66
8192 | 16
16384 | 11
32768 | 5
65536 | 1
131072 | 2
262144 | 1
524288 | 0
1048576 | 0
./tcp-accept-queue --port=80 --latency --time=5
=== Accept Queueing Latency Distribution (microsends) ===
min/avg/max: 49/1060/38857
value |-------------------------------------------------- count
8 | 0
16 | 0
32 | 5
64 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 15241
128 |@@@@@@@@@@@@@@@ 4612
256 | 60
512 | 72
1024 | 127
2048 |@@@@@@@@@@@@@@@ 4715
4096 |@@@@@@ 1908
8192 | 18
16384 | 2
32768 | 1
65536 | 0
131072 | 0