【dmp分析】服务无响应且重启无效

文章描述了一次游戏服务器排位赛无法进入的问题,从尝试重启服务器无效,到深入分析服务端日志和使用Windbg检查DMP文件,发现数据库CPU过高是问题所在。解决问题后,作者反思应加强服务监控和代码性能优化,避免类似问题发生。
摘要由CSDN通过智能技术生成

2023.3.2 【某游戏】排位赛无法进入且重启无效


背景

13:48,客服反馈移动端排位赛进不去。内心OS:小场面小场面,重启a、c服务器就OK了。果然重启之后就正常了
17:32,客服又反馈排位赛进不去。不~会~吧~ 再重启!然鹅,这次重启也无效了。无奈中只好去翻服务端日志,翻了半天,也没有什么收获,日志都比较正常
17:58,本来今天有个约会的,看来要泡汤了。于是果断推掉约会,启动大法,找运维帮忙截了两个服务的fulldump,同时自己也准备好pdb文件

分析过程

首先分析a服务

1、用windbg打开dmp文件,加载符号表
2、~*kv 命令查看所有线程,每个线程看似都比较正常
3、!runaway 命令查看所有线程花费的时间
在这里插入图片描述

4、好像也没什么异常

没什么头绪,再分析分析c服务吧

1、用windbg打开dmp文件,加载符号表
2、~*kv 命令查看所有线程,这次终于不正常了
在这里插入图片描述
在这里插入图片描述

3、好几个线程都显示停在DB操作的逻辑块
4、!runaway 命令查看所有线程花费的时间
在这里插入图片描述

5、可以看到排名第一的30号线程刚好在等待DB操作完成
6、用 ~[33]s 命令切到33号线程,kv 命令查看该线程,也是等待DB操作,其他耗时较多的线程也都是如此

分析结果

分析到了这里,基本上可以推断是数据库性能出现了问题。于是联系运维,果然数据库CPU过高,重启数据库,问题解决!

问题反思

1、服务应该尽可能接入ELK模块,这样可以让我们更好的监控到服务状态,防患于未然
2、我们写代码的时候,不能仅考虑实现,也要多关注性能。尤其数据表的设计和数据库操作,设计不好,一旦短时间内有大量请求进来,就会将服务工作线程占满,消息堆积,最终导致服务卡住甚至崩溃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值