博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次dubbo连接超时分析
阅读量:7088 次
发布时间:2019-06-28

本文共 974 字,大约阅读时间需要 3 分钟。

hot3.png

先来说说具体原因,具体原因就是provider端没有进行backlog设置,导致用的jdk默认配置50个,客户端超过百台,所以每次进行灰度发布后,客户端出现大量超时

这里dubbo的灰度发布我会单独写一篇文章在讲一下,这里暂且忽略

下面说下公司的应用场景

客户端以我们团队的为例,共有400台的客户端,服务端以用户团队为例,共有110多台

由于公司有个监控团队,会进行代码错误行统计,如果user每周进行二次发布,每次发布每台机器导致出现的链接超时报警统计为1条,则有400*110,就是44000,这样必定帮上有名了,这样导致团队压力巨大

那就想要进行线下模拟,先来说下异常出现的场景

服务端进行灰度发布,每次选择10台左右的数量,先进行服务端的下线,停服务,启动,上线

上线后,会通过zookeeper通知到客户端,这里会导致瞬间的链接压力

模拟

最初运维团队提供了大约50台测试机器,每台机器起两到三个进程,按照线上流程进行模拟,为出现异常

再次感谢运维团队,后来让运维团队提供了百台机器做测试机器,部署线上的服务,进行测试,问题重现

错误如下

142816_ASuF_1262062.png

并进行抓包

143002_yKrx_1262062.png

增加dubbo层nettyHandler中日志输出

143323_Fnwf_1262062.png

增加netty层NioServerSocketPipelineSink中获取连接处的日志输出

143437_xaqQ_1262062.png

netty层日志未见任何异常,dubbo层有断开连接的异常,最初怀疑是netty层boss线程处理不过来,但是分析抓包日志后,发现客户端发出syn包后,服务端没有给出及时响应,客户端必须要在次重发syn包

服务端的日志也同样说明了这个现象

144225_1Ekw_1262062.png

基本断定是backlog太小了,导致服务端三次握手的队列太小了,开始进行系统层面的参数调优

cat /proc/sys/net/core/netdev_max_backlog

cat /proc/sys/net/core/somaxconn
cat /proc/sys/net/ipv4/tcp_max_syn_backlog 

未起作用,同事说会不会是代码层面进行了配置,于是又去翻netty的源码,发现

144719_QhzW_1262062.png

这里未设置时是0,于是取jdk的默认配置为50个,修改该参数值,问题得以解决

正常的TCP链接

102521_hbNH_1262062.png

转载于:https://my.oschina.net/u/1262062/blog/877971

你可能感兴趣的文章
spoj 839-Optimal Marks
查看>>
dataBinding与ListView及事件
查看>>
Ubuntu linux背景指南:在开始之前需要知道哪些东西
查看>>
SID与GUID的区别
查看>>
BZOJ 2595 [Wc2008]游览计划
查看>>
实验二
查看>>
Android开发,在Activity启动时,默认隐藏软键盘。和遮挡Edittext时的处理
查看>>
Mongodb shell 基本操作
查看>>
【转】oracle connect by用法
查看>>
android Animation 动画绘制逻辑
查看>>
Ubuntu 12.04安装和设置SSH服务
查看>>
[转]重入和不可重入函数概念浅析
查看>>
git学习心得总结
查看>>
实验四 主存空间的分配和回收
查看>>
scala mysql jdbc oper
查看>>
浅谈分支预测、流水线与条件转移(转载)
查看>>
前端技能树
查看>>
【软件工程】02组软件工程组队项目——课程管理小助手需求文档
查看>>
java面试每日一题8
查看>>
leetcode Majority Element
查看>>