CPU
占用率很高,响应很慢
通过 top -c 动态显示进程及占用资源的排行榜,从而找到占用CPU最高的进程PID,得到的PID=18311
然后再定位到对应的线程,
top
-
H
-p 18311 查找到该进程中最消耗CPU
的线程,得到
PID=20300
通过 printf "0x%x\n" 20300命令,把对应的线程
PID
转化为16进制 0x4f4c
执行这个命令 jstack 18311 | grep -A 20 0x4f4c 查看线程
Dump
日志,其中
-A 20
表示
展示
20行,18311 表示进程ID, 0x4f4c 表示线程ID
CPU
占用率不高,但响应很慢
通过
jps
命令,查看
java
进程的
pid
通过
`jstack
查看线程日志
如果存在死锁情况,
Thread Dump
日志里面肯定会给出
Found one Java-level deadlock:
信息。只要 找到这个信息就可以立马定位到问题并且去解决。
jmap
生成堆的存储快照
打印出堆内存相关信息
jmap -heap PID
jinfo -flag UsePSAdaptiveSurvivorSizePolicy 35352
-XX:SurvivorRatio=8
一般在开发中,
JVM
参数可以加上下面两句,这样内存溢出时,会自动
dump
出该文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
设置堆内存大小
: -Xms20M -Xmx20M
启动,然后访问
localhost:9090/heap
,使得堆内存溢出
-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof