下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程。如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下。
1、Java CPU过高的问题排查
举个例子,如下:
packagecom.classloading;
publicclassTest{
staticclassMyThreadextendsThread{
publicvoidrun() {// 死循环,消耗CPU
inti =;
while(true) {
i++;
}
}
}
publicstaticvoidmain(String args[])throwsInterruptedException {
newMyThread().start();
Thread.sleep(10000000);
}
}
使用top命令查看占用CPU过高的进程。如下图所示。
查看进程6102下线程的占用情况,如下图所示。
使用如下命令将6122转换为16进制表示,如下:
导出CPU占用高进程的线程栈。命令如下:
jstack pid>>java.txt
内容如下