定位Java高消耗CPU的进程的具体线程问题并分析问题根源

最近在分析追踪java 进程cpu使用率过高的问题,整理了一个自动化脚本,
分享给大家参考,希望能提高定位问题的效率。
more parse-java-high-cpu-cause.sh
内容如下:

#!/bin/bash

#显示java进程情况
#top -n 1 -u root -bc | grep java | grep -v grep

#top -n 1 -u root -bc | grep java | grep -v grep | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' keyword="java…{keyword}显示cpu内存占用最高的进程ID列表前5个"
high_cpu_java_pid_list=$(top -n 1 -bc | grep ${keyword} | grep -v grep | awk ‘{print $1,$10}’ | sort -t ’ ’ -k 2 -k 1 | tail -n 5 | awk ‘{ print $1}’)
echo $high_cpu_java_pid_list
#ps -mp $pid -o THREAD,tid,time

#ps -mp $pid -o THREAD,tid,time | awk ‘{print $8,$9}’ | sed -n ‘2!p’ | sort -t ’ ’ -k 2 -k 1

ps -mp $pid -o THREAD,tid,time | awk ‘NR>2 {print last} {last=$0}’ | sed -n ‘2!p’ | sort -t ’ ’ -k 2 -k 1 | awk ‘{print $8}’ | tail -n 5

tid=$(printf “%x\n” p i d ) e c h o " 使 用 j s t a c k 命 令 查 看 问 题 线 程 堆 栈 , 将 线 程 pid) echo "使用jstack命令查看问题线程堆栈,将线程 pid)echo"使jstack线,线{pid}转换为16进制tid={$tid}"
jstack $pid | grep $tid

echo “使用jstat命令查看进程内存状况”
jstat -gcutil $pid 2000 10

echo “jstack 和 jmap 分析进程堆栈和内存状况”
#使用jmap命令导出heapdump文件,然后拿到本地使用jvisualvm.exe分析。

echo “命令格式: jmap [option] vmid”
jmap -dump:format=b,file=dump.bin ${pid}

echo “命令格式: jstack [option] vmid”
jstack -l ${pid} >> /tmp/jstack.out

echo “使用jmap命令导出heapdump文件,然后拿到本地使用jvisualvm分析。”
more /tmp/jstack.out

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开心自由天使

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

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

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

打赏作者

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

抵扣说明:

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

余额充值