- linux下使用 “top” 或者 “ps -mp 26178 -o THREAD,tid,time | sort -rn | more” 指令查看占用较高内存的java进程id;
- 使用 “top -H -p [pid]” 获取某个进程下所有线程占用cpu资源的线程id(tid);
- 将tid转换成16进制数;
- 通过jstack查看对应线程的运行信息 “jstack [pid] |grep [tid的16进制数] -A 30”, 如果发现线程时VM Thread基本就是与GC有关的线程了;
-
jstat -gcutil [pid] 1000 100查看线程GC情况
- 也可通过arthas工具查看实时占用cpu的情况,命令为“dashboard -i 1000 >> /root/cpu.txt”
如果发现此种情况,可能的原因是需要修改CodeCache的值来解决代码实时编译过程中,codecache占满导致占用cpu较大资源导致服务变慢的情况。-XX:ReservedCodeCacheSize=480M (默认值为240M) - 可以通过 ”jinfo -flag ReservedCodeCacheSize“ 指令来查看当前codeCache的值
- 使用jmap可以查看对应内存使用情况 “jmap -histo:live [pid] | head -n 100”;
- jmap -heap [pid]查看堆内存情况
注意: 执行命令查看对应进程信息时,一定记得切换到进程所属的用户,否则会有异常情况。