如果一段代码写的比较差,如多次无谓的循环,或者由于bug产生了死循环,我们可以借助linux和java的命令把它揪出来,许多应用如果经常按照下面的 方法定期进行自检,对于提高系统的处理能力大有好处。
第1步:查看目前cpu时间占用较高的线程:
首先根据top -H命令查看当前的线程信息(注意,不是进程),然后按大写的 O 键,可以选择你期望的排序字段。如可以按照cpu的占用时间(time+)来排序。
你也可以按top -H命令后按c直接查看目前占用cpu较高的线程。按q键退出查看。
如果能够确定cpu是被java进程占用,可以执行 top -H -p $JAVA_PID 过滤掉没用的线程信息。
注意:top命令会对系统的性能有影响,需要慎用。
第2步:通过jstack命令打印目前虚拟机内的详细线程信息
执行命令 /opt/jdk/java/bin/jstack $JAVA_PID 打印线程信息,为了方便查找,可以将输出的结果重新定位到临时文件里。
第3步 :将第1步中找到的10进制的线程PID号转换为16进制,然后在第2步中找到对应的线程信息(nid=0x...)。
以上三步,需要你多次执行,反复对比,如果都是在跑类似的代码,那么这段代码很有可能就是你应用的cpu杀手。