一、如何利用Thread Dump分析定位问题
现象1:cpu高,load高,响应很慢
方案:
* 一个请求过程中多次dump。
* 对比多次dump文件的runnable线程,如果执行的方法有比较大变化,说明比较正常。如果在执行同一个方法,就有一些问题了。
现象2:查找占用cpu最多的线程信息
方案:
* 使用命令: top -H -p pid(pid为被测系统的进程号),找到导致cpu高的线程id。
上述Top命令找到的线程id,对应着dump thread信息中线程的nid,只不过一个是十进制,一个是十六进制。
* 在thread dump中,根据top命令查找的线程id,查找对应的线程堆栈信息。
* 多次dump,比较方法调用。
现象3:cpu使用率不高但是响应时间很长
方案:
* 进行dump,查看是否有很多thread struck在了i/o、数据库等地方,定位瓶颈原因。
1)Waiting on condition:等待某个资源或条件发生来唤醒自己。比如线程正在sleep,网络读写繁忙而等待。
2)Blocked:阻塞,waiting for monitor entry的线程。:
现象4:请求无法响应
方案:
* 多次dump,对比是否所有的runnab