[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]netty不发送数据包的调查

上一篇:[备忘]Tomcat获取参数是null,maxPostSize=0引起的。
下一篇:[备忘]mybatis为什么不拼接id=0的条件。

添加日期:2021/7/16 10:08:53 快速返回   返回列表 阅读860次
某客户端,下发数据正常,但是不上传数据。
总是心跳超时,被服务端杀掉。
(1)查看日志,发现服务端有下发心跳,客户端也回复了,但是依然被服务端杀掉。
怀疑数据包服务端没有收到。、
(2)双方同时抓包,分析,发现有下发心跳,但是没有回复的心跳。
百思不得其解,然后突然想到,服务端IO线程队列满的话,心跳发不下来。
那么同样的,客户端是不是也是队列满呢……
(3)此时应该客户端做个dump,然后分析。
(4)客户端做netstat,发现有几个last_ack的连接。
(5)这时,在客户端的抓包里发现了,一些红色的重传数据。
开始几秒一次,后来稳定在1分钟一次,持续几分钟。
也就是上传的数据包丢失了,TCP进行重传,依然没有结果,然后加倍时间等待,最后到1分钟重试一次。
所以,原因就清楚了。
----------------------
上传数据丢包,TCP进行重传,多次没有结果,最后导致1分钟重试一次。
上传动作完全停滞,所以send指令都堆积在队列里。
然后服务端断开连接,但是因为数据没有发完,所以客户端是last_ack状态,依然在尝试发送。
如此几次,客户端有多个连接在重试。
----------------------
尝试修改windows注册表参数,将tcp重传次数改小,让它快速失败,断开连接。
貌似可以了?
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved