高手是如何定位内存问题的代码位置的
java程序CPU利用率高怎么办
工具/原料
-
Linux
-
java
-
thread
-
jstack
-
top
-
ps
-
printf
-
Runnable
方法/步骤
-
package chapter1;
public class FindJavaThreadInTaskManager {
public static void main(String[] args) {
Thread thread = new Thread(new Worker());
thread.start();
}
static class Worker implements Runnable {
@Override
public void run() {
while (true) {
System.out.println("Thread Name:" + Thread.currentThread().getName());
}
}
}
}
-
在Linux上执行上述代码
命令:
java -jar JavaStudy.jar
-
命令:
top
-
命令:
ps p 3036 -L -o pcpu,pmem,pid,tid,time,tname,cmd
-
命令:
printf "%x\n" 3046
-
nid为0xb46的线程信息。
命令:
jstack -l 3036
-
可以看到jstack命令的输出结果是相当准确的:
显示耗CPU比较高的代码与实际情况相同,都是第13行。
放心的用吧。
Enjoy youself!