随心一记

一二三四五,上山打老鼠


  • 首页

  • 归档

  • 标签
ywcsb

ywcsb

游戏可以不玩,小说不能不看。

153 日志
3 分类
42 标签
RSS
GitHub 知乎 随心一记
Links
  • 随心一记
  • 追梦人物的
  • MSDN

java CPU占用过高问题的排查及解决

发表于 2022-05-26 | 阅读 1107 | 分类于 系统运维 |

java cpu飙升居高不下,这种事情虽然很少。

但是这种故障一旦发生了,可能就很严重。

那么当我们某个Java项目占比很高了,怎么定位到代码?

1. top

使用top 定位到占用CPU高的进程PID

2. 通过ps aux | grep PID命令

获取线程信息,并找到占用CPU高的线程

ps -mp "$PID" -o THREAD,tid,time | sort -rn -k 2 | head

3. 将需要的线程ID转换为16进制格式

printf "%x\n" tid

4. 打印线程的堆栈信息 到了这一步具体看堆栈的日志来定位问题了

jstack pid |grep tid -A 30

5. 脚本

#!/bin/bash
# 进程pid
PID="$1"
# 线程tip
TIP="$2"
# grep 显示匹配后和它后面的n行
GREP_A="$3"

TIP_SHOW() {
    ps -mp "$PID" -o THREAD,tid,time | sort -rn -k 2 | head
}
# 判断是否有$TIP 没有就打印出来
if [ -z "$TIP" ] ;then
    TIP_SHOW
else
    TIP_16=$(printf "%x\n" $TIP)
    echo -e "\033[32m $TIP_16 \033[0m"
    # 判断是否有GREP_A变量
    if [ -z "GREP_A" ]; then
        GREP_A=30
    fi
    jstack $PID | grep $TIP_16 -A $GREP_A
fi 
觉得不错,支持一下!
geerniya WeChat Pay

微信打赏

geerniya Alipay

支付宝打赏

# 系统运维 # java
Python基于Redis实现分布式锁
centos7安装k8s-1.25使用containerd

发表评论

共 0 条评论

    暂无评论
© 2018 - 2022 ywcsb
冀ICP备17022045号-1
Supported by 腾讯云