维护服务器张虢咆噘时,会出现java进程在CPU、内存、硬盘上总是出现异常情况。如何找到是哪些代码出现这些异常呢?本文使用jstack来实现这个需求
工具/原料
java
jstack
ProcessExplorer
procexp
方法/步骤
1、先写一段代码来模拟一个耗CPU的线程代码:pack瞢铍库祢agechapter1;publicclass惺绅寨瞀FindJavaThreadInTaskManager{publicstaticvoidmain(String[]args){Threadthread=newThread(newWorker());thread.start();}staticclassWorkerimplementsRunnable{@Overridepublicvoidrun(){while(true){System.out.println("ThreadName:"+Thread.currentThread().getName());}}}}
2、执行上述代码,模拟一个CPU和IO利用率都高线程
3、打开任务管理,此例中,CPU利用率比较高java进程ID为7064
4、使用ProcessExplorer找到ID号为7064的进程
5、使用ProcessExplorer查看进程ID为7064的属性信息在Thread标签找到CPU利腩柽鬣盛用率的线程信息,TID为6120(10进制)
6、将CPU利用率高的线程ID6120(10进制)转换为0x17E8(16进制)
7、使用jstack查看进程7064的线程信息。找到线程号为0x17E8的线程命令:jstack-l7064
8、查看第13行的代码信息,与实际情况相符。至此,找到引发CPU利用率高的代码