CPU load飙高排查---线程级别
来源:互联网 发布:java常用框架 编辑:程序博客网 时间:2024/05/17 01:01
进程级别的逗号处理,直接top就可以了.但是线程级别的CPU load飙升处理起来相对而已比较麻烦.
好, 直接上脚本:
#!/bin/kshtypeset top=${1:-10}typeset pid=${2:-$(pgrep -u $USER java)}typeset tmp_file=/tmp/java_${pid}_$$.trace$JAVA_HOME/bin/jstack $pid > $tmp_fileps H -eo user,pid,ppid,tid,time,%cpu --sort=%cpu --no-headers\ | tail -$top\ | awk -v "pid=$pid" '$2==pid{print $4"\t"$6}'\ | while read line;do typeset nid=$(echo "$line"|awk '{printf("0x%x",$1)}') typeset cpu=$(echo "$line"|awk '{print $2}') awk -v "cpu=$cpu" '/nid='"$nid"'/,/^$/{print $0"\t"(isF++?"":"cpu="cpu"%");}' $tmp_filedonerm -f $tmp_file
现在我们就来拆解其中的原理,以及说明下类似脚本的适用范围。
1.使用top命令查看飙高的java进程,记录pid
2.通过jstack命令将java的线程栈输出,保留现场 jstack -l 30142 > 30142.stack
3.找到当前CPU使用占比高的线程,通过 ps H -eo user,pid,ppid,tid,time,%cpu –sort=%cpu
USER:进程归属用户,PID:进程号,PPID:父进程号,TID:线程号
%CPU:线程使用CPU占比(这里要提醒下各位,这个CPU占比是通过/proc计算得到,存在时间差)
4.合并相关信息,通过PS拿到了TID,可以通过进制换算10-16得到jstack出来的JVM线程号
typeset nid=”0x”
5.最后再将ps和jstack出来的信息进行一个匹配与合并。终于,得到我们最想要的信息
0 0
- CPU load飙高排查---线程级别
- CPU飙高问题 - 线程排查
- linux-一次load高但是cpu占用率低的排查
- 一次load飙高排查过程
- 高cpu排查
- CPU高问题排查
- CPU高问题排查
- linux问题排查 - 高cpu占用率的进程和线程
- cpu load过高问题排查
- CPU高的排查方法
- CPU高利用率问题排查
- 高CPU排查方法分享
- 排查线上应用高CPU占用故障
- SQLSERVER排查CPU占用高的情况
- cpu iowait高排查的case
- SQLSERVER排查CPU占用高的情况
- java高cpu的排查方法
- 【SQLSERVER】排查CPU占用高的情况
- 记kafka partition数据量过大导致不能正确重启
- 完美解决win7系统中IE占用CPU过高问题(转)
- 用优先队列式分支限界法解决0-1背包问题
- USB DMA
- 数据库问题快速定位
- CPU load飙高排查---线程级别
- 云适配
- View的可见与不可见 的visibility的数值
- 正则表达式拾贝
- C字符串函数系列
- 访问文件和目录
- kohana 框架简单小结
- 交换俩个数
- MongoDB搭建文档V1.0