简洁说明:
由于是公司项目,这里简单说下过程。
现象:
业务报表,时报表总数与日报表总数对不上
排查过程:
1.浏览器控制台看是调用的接口,找到对应相关代码
2.报表的记录是其他服务通过ActiveMQ同步过来,找到相关队列
3.进入后台查看服务日志是否有报错,查看服务进程是否还在,由于是老项目,部署在tomcat下,
tomcat占用cpu并不高
4.进入ActiveMQ的控制台,找到对应的队列,发现待消费的消息堆积的很多,并且还在持续增长
5.找到监听消息的代码查看打印日志信息,通过日志发现大部分1秒消费一条消息,有时2~3秒才消费一条消息
6.top看到mysql占用cpu较高,这时想是否业务有sql执行较慢
7.使用 show full processlist指令查看数据库中服务链接有没有占用时间长的sql(服务器上binlog开启,慢查询日志没开启),
找到两条执行时间异常的sql,navicat查看执行计划都是全表扫描的,并且两条sql都是查同一张表,查看表结构没有索引。
大佬的传送门
8.最后表增加索引,查看mq控制台队列,消息逐渐被消费不再增加堆积