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

本文介绍了如何排查Java应用中CPU使用率过高的问题。首先使用`top`命令找到高CPU进程,然后用`ps`查看线程信息,接着通过`jstack`分析线程栈,找出可能的瓶颈。同时提到了`jmap`用于分析堆内存状况,检查是否存在内存泄漏。整个过程详细阐述了从系统层面到Java应用层面的故障定位方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

jstat命令详情:https://blog.youkuaiyun.com/zhaozheng7758/article/details/8623549

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值