问题出现
使用服务器时发现服务器响应迟钝,因此使用Top命令查看服务器上运行的程序:
发现第一个程序57695占用CPU占比为%1102。因此想找到这个问题由什么问题导致的。
使用top命令查看具体的线程信息
top -p 57695 -H
由上图发现就一个应用本身的线程,其余都是与GC相关的线程,并且CPU占用率都比较高。
jstack 47 >> 47.stack
打印堆栈到具体的文件里面,然后使用linux命令:
printf '%x' 459
即可打印出CPU超高线程在具体执行什么逻辑,即可定位问题。
通过Arthas的dashboard可以看到其中GC的次数以及总的占用时长:
可以看到其survivor_space占用已经达到100%。
相关命令记录
查看默认Java程序启动后的内存参数等:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'