线上CPU飙升,问题定位

1、定位到cpu最高PID

top

2、将线程PID转换为 16进制

为后面查找 jstack 日志做准备

#查看进程内最耗费CPU的线程
top -Hp pid

#该进程id是10进制的,需要转为16进制
printf “%x” PID

注意 (1)可以直接查找jstack数据

jstack PID | grep 54ee

(2)也可以通过以下步骤导出日志文件

3、导出top中cpu最高PID时实时栈文件

jstack PID > xx.log

4、分析栈文件,查询文件中线程状态:

java.lang.Thread.State:

BLOCKED过多:表示程序中有死锁的代码

RUNNABLE过多:表示程序一直在处理,检查是否有死循环

WAITING:无限等待另一个线程执行一个特定动作

关注WAITING ,BLOCKED的地方 可以初步定位到问题所在。

5、jmap导出top中cpu最高PID 的dump文件

注意点:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意。

导出整个JVM 中内存信息

jmap -dump:live,format=b,file=/文件路径/heap-dump.bin  PID

6、分析dump文件

使用JDK下的jvisualvm.exe工具分析。 排查非基本数据类型 实例数和内存占用较高的包。定位到业务代码

【建议每次间隔一段时间,便导出dump文件,多个文件对比分析,单次的dump文件参考意义不大】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值