最近线上服务偶发连接重置,排查过程比想象中绕,记录一下。
高峰期偶发 connection reset by peer,但服务端负载并不高,CPU 和内存都在正常范围。
先从内核连接队列看起。半连接队列和全连接队列都能通过 ss -lnt 的 Send-Q 观察到溢出情况。
ss -lnt | head -20 netstat -s | grep -i -E "listen|overflow|drop"
发现有轻微的 accept 队列溢出。把 somaxconn 从 128 调大到 1024 后,溢出计数不再增长。
顺带调整了几个和回收相关的参数,注意不要盲目照抄,要结合自己的 RTT 来算:
net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_tw_buckets = 262144 net.core.somaxconn = 1024 net.ipv4.tcp_fastopen = 3
调整后观察了两周,重置问题没再复现。