server跑久了Recv queue不断增大如何定位?

Xsank 发布于 2015/08/03 16:08
阅读 417
收藏 0

server采用tcp协议,一直没有报错,cpu及内存负载也没有大的变化,但是在跑了一段时间后,recv queue开始不断变大,导致部分socket连接失效,这种问题通常有哪些情况?

如下:

tcp     7528      0 192.168.206.131:37919       100.54.38.37:1234          ESTABLISHED off (0.00/0/0)
tcp     7422      0 192.168.206.131:33962       100.54.38.39:1234           ESTABLISHED off (0.00/0/0)
tcp     7846      0 192.168.206.131:50650       100.54.38.38:1234           ESTABLISHED off (0.00/0/0)


加载中
0
乌龟壳
乌龟壳
recv queue是什么?
Xsank
Xsank
就是通过nestat 观察的 receive queue
0
0x0001
0x0001
ESTABLISHED off, 很有可能是一个半关闭状态,就是服务端关闭了连接,但是客户端还没响应确认关闭这个操作,但是服务端认为我关闭你了,我不处理你数据了,于是这个recv queue就停在这里了, 可以设置socket 的SO_LINGER参数,让socket关闭的时候立即关闭底层socket
Xsank
Xsank
首先,这三个连接确认从来没有关闭过,如果是半连接,也肯定是异常造成的,异常造成半连接应该可能性比较小,另外,如果是半连接,意味着这条连接是不可写只可读的,而现有的情况是server不会主动往此连接发送消息,但是队列开始在不断变大
返回顶部
顶部