一般情况下CPU过高在几分钟之内,系统无感知变慢,是正常情况,若CPU过高持续时间较长,则可能存在问题。
先收集一下日志分析一把吧。
(1592进程号)
以下为操作指导:
若应用CPU过高,操作以下步骤:
打开第一个窗口:top -H -p 进程号(此为应用的进程号)
打开第二个窗口:
su - wfm1
cd /opt/inoc1/wfm/jdk/bin
若系统系统无法正常使用,则需要通过以下命令获取内存dmp
先收集一下日志分析一把吧。
(1592进程号)
以下为操作指导:
若应用CPU过高,操作以下步骤:
打开第一个窗口:top -H -p 进程号(此为应用的进程号)
打开第二个窗口:
su - wfm1
cd /opt/inoc1/wfm/jdk/bin
./jstack -l 1592 > jstack_20141216_03.log(当执行此脚本的同时截取第一个窗口的截图,以便记录cpu过高的线程)
在jstack日志中,我们根据top -H -p 进程号的命令,能找到对应进程相应的线程ID,
再根据线程ID(我们的线程ID是采用10进制的,但是在jstack日志中是采用16进制的,所以根据线程ID去查jstack日志的时候需要将10进制转换成16进制),
到jstack日志中找到对应线程的相关日志,就能分析出CPU过高是由于那个业务所引起的。
若系统系统无法正常使用,则需要通过以下命令获取内存dmp
./jmap -dump:format=b,file=dump.bin 1592
内存的dmp需要采用MemoryAnalyzer工具来进行分析。
若DB的CPU过高,操作附件中的步骤来收集信息。
DB的CPU过高,可以先通过获取DB的AWR报告,在AWR报告中可以分析出具体SQL的问题。