cpu持续高起,如何定位问题

342 阅读2分钟

1.首先top查看进程列表,查找cpu占用率很高的进程

top
15088

2.然后再通过ps命令查看这个程序的线程信息,tid代码线程ID,time代表这个线程的已运行时间

ps -mp 15088 -o THREAD,tid,time

3.进制转换,3b4c 再将这3个TID转为16进制,为等会在jstack中查找方便

printf "%x\n" 15180

15180	3b4c
  1. jstack查看线程信息
whereis java

./jstack 15088 |grep 3b4c

5.jstack 存储堆栈详细信息,定位到具体的代码问题

./jstack 15088 >> /home/admin/15088.txt

总结: 最后,总结下排查CPU故障的方法和技巧有哪些:

1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。

2、PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。

3、jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

  1. jmap -histo pid >>jmap.log 打印此刻,堆 内存中所有的对象 和 数量 (jmap.log 默认没带时间戳),可以在内存占用高的时候看是否存在内存泄漏,可以看到某个对象是否过多。 jmap -histo pid|head -n 10 查看前十位,对象和数量

  2. jmap -heap pid 来打印堆的存储情况

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 3221225472 (3072.0MB)
   NewSize                  = 268435456 (256.0MB)
   MaxNewSize               = 268435456 (256.0MB)
   OldSize                  = 2952790016 (2816.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 241631232 (230.4375MB)
   used     = 218613656 (208.4862289428711MB)
   free     = 23017576 (21.951271057128906MB)
   90.47408904491287% used
Eden Space:
   capacity = 214827008 (204.875MB)
   used     = 211860512 (202.04592895507812MB)
   free     = 2966496 (2.829071044921875MB)
   98.61912334598078% used
From Space:
   capacity = 26804224 (25.5625MB)
   used     = 6753144 (6.440299987792969MB)
   free     = 20051080 (19.12220001220703MB)
   25.194327580608192% used
To Space:
   capacity = 26804224 (25.5625MB)
   used     = 0 (0.0MB)
   free     = 26804224 (25.5625MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 2952790016 (2816.0MB)
   used     = 98283536 (93.73048400878906MB)
   free     = 2854506480 (2722.269515991211MB)
   3.328497301448475% used