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)
recvqueue是什么?就是通过nestat观察的receivequeue<spanstyle="font-family:微软雅黑,Verdana,sans-serif,微软雅黑;font-size:14px;line-height:22px;background-color:#FFFFFF;">ESTABLISHEDoff,很有可能是一个半关闭状态,就是服务端关闭了连接,但是客户端还没响应确认关闭这个操作,但是服务端认为我关闭你了,我不处理你数据了,于是这个recvqueue就停在这里了,可以设置socket的<spanstyle="color:#333333;font-family:Arial;font-size:14px;line-height:26px;background-color:#FFFFFF;">SO_LINGER参数,让socket关闭的时候立即关闭底层socket首先,这三个连接确认从来没有关闭过,如果是半连接,也肯定是异常造成的,异常造成半连接应该可能性比较小,另外,如果是半连接,意味着这条连接是不可写只可读的,而现有的情况是server不会主动往此连接发送消息,但是队列开始在不断变大
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。