分析定位问题思路
一、查看现场
查看现场包括如下几个步骤:
1、快照分析
- 功能:观察程序当前的状态
- 场景:检查程序当前是否处于整体异常状态
- 举例:gdb、Xmap、mat、jstack
Dump的时候系统容易挂掉,因此在JVM里加了个参数,在OOM的时候自动dump内存:-XX:+HeapDumpOnOutOfMemeryError
参见:http://ifeve.com/one-java-oom/#more-25597
2、调用分析
- 功能:观察调用和调用栈
- 场景:请求出错、请求慢、偶发错误
- 举例:btrace、Xtrace
关于Btrace的详细操作指南请参见:https://yq.aliyun.com/articles/7569?spm=5176.100239.yqblog1.102.DGWrRf
http://blog.csdn.net/chaofanwei/article/details/20224339
3、聚合分析
- 功能:按某些维度采样、聚合和对比数据
- 场景:查找性能问题
- 举例:perf、Xstat、Xtop
相应性能工具汇总请参考:http://blog.jobbole.com/76103/
二、瓶颈分析
在分析问题经常会碰到一些瓶劲问题,可以采用如下方式来进行分析:
1、观察
如:通过perf发现close系统调用消耗了大量CPU;
2、重现
如:通过jstack发现大量线程卡在NIO的CloseIntFD上;
3、分析
如:通过strace发现close系统调用的处理时间较长;
参见:http://iamzhongyong.iteye.com/blog/1441285