java程序没有输入的情况下狂占25%的CPU,应该是有死循环,所以寻找错误代码在哪儿。
使用任务管理器,查看java的进程id是2128,然后用jdk自带的jstack执行
jstack -l 2128 > 2128.stack.txt
然后用ProcessExplorer打开进程列表,在2128上点击右键->属性->线程,查找占用最多的线程ID是3520,转成二进制是0xDC0
然后在2128.stack.txt里查找DC0,发现有一段代码有嫌疑:
"Thread -5 " #22 prio=5 os_prio=0 tid=0x000000057a83000 nid=0xDC0 runnnable
java.lang.Thread.State:RUNNABLE
at com.xxx.xxx.xxx$1.run(XxxServiceImpl.java:61)
查找相关代码,果然在那里用到了类似
while(true)
if (hashMap.isNotEmpty())
{
continue;
}
这样的代码,这样改起来就有针对性了。
参考资料: http://blog.csdn.net/hexin373/article/details/8846919