在工作中经常遇到tomcat占用cpu居高不下,针对这种情况有以下处理办法进行排查。

  1. jps --> 查看java的进程

  2. top -Hp pid --> 根据jps得到的进程号(pid),查看java进程的所有线程,并且可以看到所有线程占用CPU的情况,-H用于显示某个进程的所有线程。

  3. printf "%x\n" 9733 -->将第2步查到占用较高CPU的线程号转换为16进制,以便于jstack查看

  4. jstack pid | grep 2605 --> 2605为第3步9733转换为16进制后的数字,因为jstack显示的线程号是以16进制表示的!
    jstack的作用是显示正在运行的所有java线程情况,jstack pid | grep 2605的意思只显示某个java线程的运行信息。通过这种方法,可以将此线程正在运行的方法显示出来,将此方法交给开发即可

    wKioL1kW3quibG8_AAAOgbkoF8w645.png