cpu飙升时的排查方式、线上环境常规排查步骤

10 篇文章 0 订阅
4 篇文章 1 订阅

提示:面试问题:cpu飙升时的排查方式、生产问题排查方式


前言

相对比而言,后端开发需要掌握的知识更多一些。毕竟我们要懂java、数据库、linux、各种中间件。。我们今天就说一说,当服务器中的cpu突然飙升时,怎么排查。本人水平有限,如有误导,欢迎斧正,一起学习,共同进步!


一、cpu飙升时的排查步骤

1、top

使用 top 命令,查看占用资源最多的进程(cpu的使用率、内存什么的)

top

效果图:
在这里插入图片描述

2、top -Hp pid

使用 top -Hp pid 定位这个进程内,占用cpu最高的线程。

top -Hp 182275

效果图:
在这里插入图片描述

3、printf ‘0x%x’ tid

使用 printf ‘0x%x’ tid 将进程id 转换为16进制 零x,中文下的单引号

printf ‘0x%x’ 182347

效果图:
在这里插入图片描述

4、jstack pid | grep tid

jstack pid | grep tid 找到线程堆栈 pid是进程id、tid是线程id

jstack 182275 | grep 0x2c84b -A 30

效果图:
在这里插入图片描述

二、总结

总结一下,其实就是4步:

  1. top oder by whit P :1040 // 首先按进程负载拍粗找到 axload(pid)
  2. top -Hp 进程PID : 1073 // 找到相关负载 线程PID
  3. printf “0x%x\n” 线程PID: 0X431 // 将线程PID转换为16进制,为后面查找jstack日志做准备
  4. jstack 进程PID | vim +/十六进制线程PID - // 例如: jstack 1040|vim +/0x431 -

三、线上环境常规排查步骤

1、查看服务器中线程情况

top -H -p pid

ps -mp pid -o THREAD,tid,time

2、查看系统异常进程的16进制

printf “%x\n” nid

3、查看异常线程堆栈信息

jstack pid | grep number

4、查看占用最大内存对象前100

jmap -histo pid|head -100

5、导出到文件

jstack -l PID >> a.log

6、或dump信息使用工具Mat或者JProfiler查看

jmap -dump:live,format=b,file=/dump.bin pid


总结

这里是比较传统的线上问题排查方案,后续有机会的话,会分享一些其他的方案,这样我们可以视情况而定,多一些手段,多一份保障。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线上内存飙升是一个比较严重的问题,如果不及处理,可能会导致系统崩溃。以下是一般的排查问题的过程: 1. 监控告警分析:系统应该有监控告警机制,如果内存使用率过高,应该及发出告警并记录监控数据。首先,需要分析告警信息和监控数据,确认内存使用率确实出现了异常。 2. 定位问题代码:通过监控工具、日志和代码调试等方法,确定哪些代码出现了内存使用率飙升的问题。可以使用 JVM 的内存分析工具,例如 jmap、jhat、jstack、VisualVM 等来分析内存使用情况,并找出内存泄漏的代码位置。 3. 解决问题代码:根据定位出的代码问题,进行修复。对于内存泄漏问题,需要分析代码中的对象生命周期,释放不再使用的对象,并检查是否存在对象引用未释放的情况。对于频繁创建和销毁对象、大对象等问题,需要优化代码逻辑,减少内存占用。 4. 测试验证:完成修复后,需要进行测试验证,确保问题得到了解决,并且没有引入新的问题。 5. 监控预警优化:针对该问题,需要优化监控预警机制,避免类似问题再次出现。可以增加更加详细的监控数据、设置更加敏感的告警阈值等等。 总之,线上内存飙升是一个比较严重的问题,需要及发现、定位、修复和验证。同,也需要优化监控预警机制,避免类似问题再次出现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值