如何排查java程序导致的cpu和内存过高异常

引言

Java程序在实际生产过程中经常遇到CPU或内存使用率高的问题,那么应该如何排查问题的原因呢,本文大概描述一下排查方法。

一、命令方式分析

1.排查占用CPU的进程

  • 使用top命令,在大写打开的情况下按P键或者在大写没有打开的情况下按 shift+P键,会按照CPU使用率的高低进行排序(在大写打开的情况下按M键或者在大写没有打开的情况下按 shift+M键,会按照内存使用率的高低进行排序),查找使用率最高的进程获取进程PID。

2.查找实际占用最高的线程

  • 使用命令top -H -p PID,此处PID就是上一步获取的进程PID,通过此命令可以查看实际占用CPU最高的的线程的ID,此处几位TID

3.获取对应线程的线程栈信息

  • 使用命令printf "%x\n" tid,将线程ID转换为16进制
  • 使用命令jstack PID(进程pid) |grep tid(线程pid16进制) -A 50,此处tid为上一步转换后的16进制,使用此命令可以查看到对应线程的线程栈信息,从对根据线程栈对对应的代码进行分析

二、dump文件分析

1.dump文件输出

  • 输出dump文件方式一:jmap -dump:live,format=b,file=aaa.dump pid
  • 输出dump文件方式二:jcmd pid GC.heap_dump smpo1.dump
  • 内存溢出输出dump:     -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=路径

注:命令直接复制可能执行报未找到命令的话就手敲

2.可视化工具分析

之后用dump分析工具打开分析堆栈信息,比如jdk自带的jvisualvm

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿德小仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值