线上问题:
客户端不能推送数据到服务端。
排查:
ping ip或者telnet port全是正常的,不奏效。
通过wireshark抓取报文查看,发现一个奇怪现象是窗口不固定,但是整体趋势是逐渐减小,直到为0. 服务端报文如下:
至此服务端一直回复服务端窗口为0,导致客户端数据无法回传到服务端。
通过 netstat -ano查看服务端TCP内核的发送和接受缓冲区,发现服务端接受缓冲一定字节,但一直不能发送。
结论:
由此可以判断,客户端一直在发数据,但是服务端处理数据整体慢于客户端发送数据,导致服务端数据积压。
解决方案:
后台修改成异步处理,如果收到TCP消息,先缓存到业务中,然后启动线程消费。
推荐阅读:
关注【被讨厌的勇气】
本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。