1.背景
- 某个业务方调用自己工程的rpc,由于本工程内的rpc耗时过长,导致调用rpc熔断(invoke rpc timeout)。
2.问题排查
2.1 事先准备
- 确保线上和预发环境代码一致
- 相关机器安装了Arthas,该诊断操作不建议在生产环境使用,可离线排查相关耗时。
2.2 耗时分析
$java -jar arthas-boot.jar
- 2.选定指定PID
- 选定相关java进程的PID前面的行号,输入回车即
- 3.指定相关耗时方法
- Arthas可使用Trace命令,并且配合相关option。如下图1和图2:
$ trace -E class1 method1
- 4.耗时方法
- 从下图,可以看出我们这个方法存在两个操作的方法调用,分别是400ms+和500ms+。(ps:如果希望打印完整的链路调用时长,可以在trace后面指定更具体的class|method)。
- 5.刨根问底
- 通过刨根问底,发现这个两个耗时的方法底层的sql并为走到索引,导致整个查询均为全表扫(数据量100W+),所以相当耗时,通过对相关慢sql优化(索引优化等手段),耗时从原先500ms下降为3ms。
3.总结
- 1.Arthas作为阿里的诊断神器,在日常问题排查中可以作为首选,了解常用的命令有助于解决问题。
- 2.针对Mysql的学习和优化,建议可以学习下阿里丁奇《MySQL45讲》(ps:自行百度哈~)。