JVM自带的分析工具
jmap :
- jmap -heap PID 实时的查看堆的使用情况(例如:新生代的大小,老年代的大小)
- jmap -dump:live,format=b,file=heapt0923.bin pid 导出具体的进程使用情况的文件,然后可以通过MAT工具进行分析
jstat :
- jstat -gc PID 3000 分析gc的执行状况,3秒钟一次,分析执行GC的测试和频率
jstack:
经常用于查询CPU负载高的解决办法:(原理:方法是由线程执行的,找到CPU负载高的线程就能定位到有问题的方法,例如死循环方法造成的CPU负载高,就可以通过jstack来排查,)
用jstack导出线程的dump(这个问题有时没有那么明显,如果不是CPU一直是100%,可能间歇性高的cpu,那么获取到的dump会不会有,有问题的线程不一定)
- 作用:分析线程执行的情况(查看线程都在干什么)
- 常用:主要用来定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待。
- 步骤
- 先使用top命令查找出占用CPU比较高的进程的PID
- 使用top -Hp PID 分许,该进程下,那些线程消耗的CPU资源比较多
- 使用 printf ‘%x\n’ PID将PID转换为16进制的
- 使用jstack -F 999 > /home/cpu.log 将cpu分析出的信息打印cpu.log中
- 在分析文件中查找转换成16进制的PID
iostat
- 使用iostat -xd 1 查看IO使用率
-
一般当%util超过5%的时候开始有问题
image.png
网友评论