线上服务 CPU 100% 问题定位解决

线上服务 CPU 100%

top(整机),vmstat(CPU),free(内存),df(硬盘),iostat (磁盘IO),ifstat(网咯IO)等…

top -c 
# 输入大写P,则结果按CPU占用降序排序。
# 输入大写M,结果按内存占用降序排序。
# 按数字 1 则可以显示所有CPU核心的负载情况。
top -d 5                # 每隔 5 秒刷新一次,默认 1 秒
top -p 4360,4358        # 监控指定进程
top -U johndoe          # ‘U’为 真实/有效/保存/文件系统用户名。
top -u 500              # ‘u’为有效用户标识
top -bn 1               # 显示所有进程信息,top -n 1 只显示一屏信息,供管道调用
top -M                  #  memory summary in megabytes not kilobytes
top -p 25097 -n 1 -b    # -b 避免输出控制字符,管道调用出现乱码
top -bn1 | less         # top翻页
# 增强版的 top:htop ,一个更加强大的交互式进程管理器:


# 定位异常线程及具体代码行 - 传统方案
# 首先按进程负载排序找到  axLoad(pid)  
top oder by with P: 1040jstack
# 找到相关负载 线程PID  
top -Hp 进程PID                # 1073
# 将线程PID转换为 16进制,为后面查找 jstack 日志做准备  
printf “0x%x\\n”线程PID        # 0x431
# 例如:                         jstack 1040|vim +/0x431 - 
jstack  进程PID | vim +/十六进制线程PID -     

实战

top -c 
# 输入P  CPU占用降序排序
top -c -p  6415     # 监控指定进程
# shift + h      -> 查找出那个线程消耗的cpu高

top -H -p pid # 显示指定进程的所有线程的资源消耗情况

jstack 14521     # 找一个线程分析
printf "%x\n" 7065 # 将需要的线程ID转化为16进制格式,为后面查找 jstack 日志做准备  ex:7065 -> 8bf8
jstack  6415 | grep -A 10 8bf8    # jstack查找这个线程的信息  ( jstack [进程]| grep -A 10 [线程的16进制] )


jstack -l pid # 拿到进程的线程dump文件。这个命令会打出这个进程的所有线程的运行堆栈
# 查找指定进程占用CPU最高的5条线程
sh show-busy-java-threads -p pid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值