下面通过一个模拟实例来分析排查Java应用高CPU高内存的过程。如果是Java面试,这两个问题在面试的时候出现的概率很高,所以我打算在这里总结一下。1、排查JavaCPU高问题如下:packagecom.classloading;publicclassTest{staticclassMyThreadextendsThread{publicvoidrun(){//无限循环,消耗CPUinti=0;while(true){i++;}}}publicstaticvoidmain(Stringargs[])throwsInterruptedException{newMyThread().start();Thread.sleep(10000000);}}使用top命令查看占用CPU过多的进程。如下所示。查看进程6102下线程的占用情况,如下图。使用如下命令将6122转换为16进制表示,如下:导出CPU占用率高的进程的线程栈。命令如下:jstackpid>>java.txt内容如下:mazhi@mazhi:~$catjava.txtAttachingtoremoteserverpid,pleasewait...2021-02-2315:38:18FullthreaddumpJavaHotSpot(TM)64-BitServerVM(25.192-b12mixedMode):“contactListener”#10DAEMONPRIO=9OS_PRIO=0TID=0x00007F4EE0001000NID=0x1956Runnable[0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000大号]=0tid=0x00007f4f180d6000nid=0x17earunnable[0x00007f4f044da000]java.lang.Thread.State:RUNNABLEatcom.cpuhigh.Test$MyThread.run(Test.java:8)//这里表示第8行,是死循环代码的开始。..exportedstackinformation线程的状态(一般是找RUNNABLE状态)和调用栈结合起来找问题。Threaddump分析:threaddump分析的主要目的是定位线程长时间停顿的原因2.排查Java内存过大问题例如:packagecom.classloading;importjava.util.ArrayList;importjava.util.List;publicclassTest{privatestaticfinalintUNIT_MB=1024*1024;publicstaticvoidmain(Stringargs[])throwsInterruptedException{List
