CPU负载过高解决问题过程
(1)根据top命令找到占用cup高的进程编号,此处以pid 8211为例
(2)找到该进程pid后,首先显示该进程线程列表,并按照cup占用高的线程进行排序
ps -mp 8211 -o THREAD,tid,time | sort -rn
(3)找到耗时高 cup占用率高的线程号 如8251,将该线程id转换为16进制的格式
printf "%x\n" 8251
(4)打印线程的堆栈信息
jstack -l 8209 > /home/8251.stack
(5)在堆栈文件中搜索线程ID等于nid=0x203b的线程,即可列出该线程对应的类
(6)根据线程信息找到对应的类定位问题即可
常用命令如下:
(1)jstat命令
jps -lvm 输出当前服务器进程信息 带jar包路径以及启动内存设置参数
jstat -gc pid 查看jvm各区域内存使用情况 以及垃圾回收情况统计
jstat -gcutil pid 查看已使用空间占总空间的百分比
(2)jmap命令
jmap -heap pid 显示Java堆详细信息
jmap -dump:format=b,file=文件名 [pid] 导出内存dump文件至本地
参考链接