您的位置:首页 > 其它

服务器性能瓶颈定位-服务器卡实例解决

2012-01-18 16:02 232 查看
前言:

计算机是一个多层的结构,计算机领域的好多问题是通过增加一层中间层还解决,悲剧的是这样上层发生问题得时候,没有头绪的时候,我们得通过了解底层,熟悉底层来定位和解决,或许这也是成长为nb程序员的道路吧.

问题:



服务器抽象后架构如上:

12月份底我们的游戏服务器出现了卡的情况,

服务器在某个时间点全区出现卡,表现为客户端的人物不动,npc不动,

但是服务器的cpu和内存资源占用都很低.

分析:

第一阶段: 定位为网关的问题

定位方式: 游戏客户端设置了ping指令, 记录了客户端到每个服务器一个来回的时间,而且在服务器内部收到消息的时候打了日志

出现卡现象的时候网关发消息到逻辑服务器,到收到逻辑服务器的消息时间时间没多少延时

但是用户收到ping消息的延时很长,初步定为了网关的出现了卡的情况.

对比了网关服务器最近提交的代码,发现有增加读写锁的情况,写了测试代码,发现多线程情况下有时候开销很大

具体这边

修改了相关代码

第二阶段:继续优化代码

上面的问题提交了,问题没有得到解决,当时就没有方向了

猜测可能是逻辑瞬间发送的消息很多,导致网关处理不过来,另外生成图形验证码耗时,可能导致消息的堆积

屏蔽了相关代码,继续观察

第三阶段: tcpdump定位问题

通过抓包分析网关和客户端直接通讯的情况,详细这边

问题定位为客户端到服务器的这条线出问题,最后发现是客户端在网络卡的情况下,会超量发包,网络越卡发包越多

服务器socket接受缓冲区被占满,问题得到了解决.

总结mark下,借助优秀的工具,能让我们更好的定位分析问题,还是要多学习啊

tcpdump的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐