当Java服务出现CPU占用过大时,如何定位问题?

问题:

在运行Java服务时,时常与遇到CPU过大,程序卡死的情况;以下方式可以通过JVM排查定位发生错误的代码:

Linux环境:

1、top命令,查询占用cpu过大的服务ID(pid)

2、ps -mp {pid} -o THREAD,tid,time | sort -rn 查询服务中各线程占用情况,获取线程 tid

3、printf “%x\n” tid 将线程ID 转成 16进制

4、jstack {pid} |grep {tid} -A 30 使用jstack 命令打印线程堆栈信息

5、 jstat -gcutil {pid} 2000 10 查看进程的内存情况

6、jstat {pid} >>jstat.out 导出文件,查看详细报错位置

windows环境:

1、在进程服务中,找到javaw.exe服务, 获取 服务ID(pid)

2、使用 jstack -l {pid} > c:/***.stack 命令导出运行快照

3、在windows下查看线程的CPU占用率,需要使用工具Process Explorer v15.3 下载地址

4、在相应的进程中右键properties中找到Threads,找到占用CPU最高的线程ID {tid}

5、将tid转成16进制

6、在导出来的.stack快照文件中搜索十六进制的{tid}相应位置查询详细错误信息即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值