话说这天一大早,那个悲催的中年架构师大刘又被手机微信群给炸醒。部门的运维兄弟在公司微信群里说:

短信的生产环境服务器 CPU 占用率过高,疯狂报警。是不是你们昨天上线看门狗导致的?

大刘迷了巴登的想了想,没错,昨天确实给短信服务装上了看门狗。但是看门狗服务肯定不会有问题(架构师必备的蜜汁自信),而且上线之前各轮测试也都测过了,没见过这个想象啊。

难道是测试妹子没测试到位?难道线上短信应用自身出现了问题?

生产无小事,小事更不能忽视,主要是怕扣绩效奖金。大刘迅速打开电脑,打开 VPN ,远程登上短信生产服务器,开始大刘最拿手的 2W1H 三板斧诊断之旅。

接下来的诊断内容有点烧脑,节奏有点快,请大家坐稳扶好。

1. 病号是谁(WHO)?

大刘拿出控制台诊断仪器,输入 top 命令一探究竟。我勒个去,不看不知道一看吓一跳,PID 为 1878 的病号,CPU 占用居然 200% 多。

问题算是定位到了,但是 PID 为 1878 的病号到底是谁,难道真是昨天上线的看门狗 ?

虽然大刘久经职场,但是排查生产问题时,内心还是比较忐忑,毕竟这是生产环境。

说时迟那时快,只见大刘一个命令输入:

ps -ef | grep 1878

定睛一看,原来是放屁瞅别人,短信服务自己在作祟,和看门狗没关系,大刘心里一下子平缓了不少。

锅找到了主儿,其实这个时候大刘完全可以把这个问题甩给短信开发团队,但是大刘最喜欢做的不是甩锅,而是打破砂锅刨到底。

2. 病号哪里出了问题(WHERE)?

为什么 1878 号病人占用 CPU 会这么高呢?

只见黑乎乎的控制台诊断仪器上,大刘熟练的输入:

jstack -l  1878 >> 1878号病历.log

这样便得到一份 1878 号病人的病历详情单,一会儿用得上。

到底 1878 号病人的哪个部位出了问题呢?

话没说完,只见大刘又在控制台诊断仪器上,输入一个:

top -Hp 1878

白板黑字,把 1878 号病人的器官信息全部列了出来。

看到结果,甚是一惊,PID 代号为 8721 的器官占用 CPU 100% 多。

疑惑油然而生,这个 PID 代号 为 8721 的器官是啥,是头、是眼睛、还是胳膊腿呢?这些器官展示的 PID 列都是昵称,都这么善于伪装,如何揭露它的真面目呢?

还好大刘有高招,借助照妖镜算法,熟练的输入:

printf "%x\n" 8721

果真使得代号为 8721 的器官,现了真身,真实身份居然是 2211 的呼吸道,怪不得病号一直气喘吁吁,上气不接下气。

到这一步还无法对症下药啊,还需要进一步确诊 2211 的呼吸道到底出了什么幺蛾子,导致 1878 号病人一直气喘吁吁,上气不接下气?

只见黑乎乎的控制台诊断仪器上,大刘再次飞一般的在输入:

grep 2211 -A20 1878号病历.log

诊断结果随之显示在诊断仪器上。

曾经背了很多锅的大刘,看到诊断结果心里乐了一下,一眼就看出是高并发情况下用了 HashMap 的问题(请大家们自行寻找谷歌、百度,就不在此深入展开啦),终于拨开云雾见青天。

3. 如何对症下药( HOW )?

在大刘行云流水没有一丝一毫的拖泥带水般的神操作下,1878 号病人的诊断也就结束了,这个锅就彻底被打破了。

术业有专攻,大刘就可以郑重的告诉短信开发同事具体原因了,捉得病根,开发同事也就可以对症下药啦。

大刘这套行走江湖的诊断问题方式你 get 到了没?大刘自己简单概括为 2W1H 三板斧:病号是谁、病号哪里出了问题、对症下药。

1、病号是谁?(WHO)

  • 第一步:采用 top 命令,找出 CPU 占用最高的病号 PID ;

  • 第二步:通过 ps -ef | grep PID 查看病号对应的真实身份。

2、病号哪里出了问题?(WHERE)

  • 第一步:采用 jstack -l  PID >> PID.log  获取病号的各器官信息的病历单;

  • 第二步:采用 top -Hp PID 拿到占用 CPU 最高的器官昵称 PID ;

  • 第三步:采用 printf "%x\n" PID  根据器官昵称 PID 的拿到器官真实身份 TID ;

  • 第四步:采用 grep TID -A20 pid.log 根据 TID 去病历单中匹配,确定是哪出了问题。

3、捉得病根、便可拿出医药箱,对症下药啦。(HOW)

作为程序猿,工作中难免会遇到不少类似这样的问题。面对问题,你如果像无头苍蝇一样乱撞,撞得头破血流依然不知道缘由,在背锅即将成为现实时,那就不妨试试大刘的 2W1H 三板斧的诊断方式,说不定会帮你快速定位、解决线上问题,毕竟快速的解决生产问题会把损失降到最低。

最后,想对大家说一句:

作为程序猿,一定要有程序猿的态度。避免背锅,拒绝甩锅,打破砂锅,从你我做起。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

架构师说了:不想做背锅侠?生产问题要这样查相关推荐

  1. 告别运营怪圈,不做“背锅侠+加班狗+低薪族”!

    万年背锅侠和加班狗已不再是程序员,而是运营,被毙稿.被客户骂.被领导和同事质疑是普通运营的日常. <2017 年运营行业生存报告白皮书>显示:69.8% 的运营月薪低于 8000--远低于 ...

  2. 这样查生产问题,不做背锅侠

    一大早就被微信群炸醒,开发短信服务的猿妹子,在公司微信群里说:短信的生产环境服务器, CPU 占用率过高,疯狂报警,应该是你们昨天上线看门狗导致的(看门狗:守护短信服务的监控应用,后续有机会再进行分享 ...

  3. HTTPS站点不安全?SSL证书不做背锅侠

    SSL证书在保护网站数据传输上起到了至关重要的作用,它的存在让网站访问者在访问浏览器时留下的信息和数据不被窃取.篡改和监听,让访客们访问网站时非常放心.非常安心,使网站由明文传输式的http变成数据加 ...

  4. 上夜班的linux运维都坑,运维是个坑,盘点背锅侠的点点滴滴~

    原标题:运维是个坑,盘点背锅侠的点点滴滴~ 运维是个遇坑.填坑.再遇坑.再填坑,有些时候还被同事挖坑,duang的一下掉下去了,还要自己慢慢爬坑:有些却是自己了解不够深入,或不够细心所留下来的坑. 小 ...

  5. 产品经理真的是「背锅侠」吗?

    我经常可以看到产品经理们在深夜发出一些激励人心的文字,例如:「由于自己考虑不缜密引发了需求变更,进而导致了开发同学在深夜还在加班敲代码,自己十分自责内疚,不过最后产品还是顺利上线了...」.每每看到此 ...

  6. 测试员就是“背锅侠”?学会这些,扔掉测试人常背的3口“锅”

    最近发生了一起生产事故,究其根源,事故本身属于架构或者需求层面需要规避的问题,测试人员的责任其实是非常小的,但实际情况是:相关测试人员因此承担了很大的压力,成为质量问题的"背锅侠" ...

  7. 测试员都是背锅侠?测试人员避“锅”攻略,拿走不谢

    最近发生了一起生产事故,究其根源,事故本身属于架构或者需求层面需要规避的问题,测试人员的责任其实是非常小的,但实际情况是:相关测试人员因此承担了很大的压力,成为质量问题的"背锅侠" ...

  8. 测试员≠“背锅侠”:学会这些,扔掉测试人常背的3口“锅”

    最近发生了一起生产事故,究其根源,事故本身属于架构或者需求层面需要规避的问题,测试人员的责任其实是非常小的,但实际情况是:相关测试人员因此承担了很大的压力,成为质量问题的"背锅侠" ...

  9. 一代背锅侠,汉初最能为刘邦背黑锅的人

    萧何--一代背锅侠,是汉初最能为刘邦背黑锅的人. 不过刘邦用三杰论.功人功狗.强封首功为他洗白了.由于萧何背的锅都比较隐秘,且恰到好处的最终转化为成绩,加上汉朝逐渐稳定强盛,萧何作为开创时代的当时行政 ...

最新文章

  1. MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)
  2. Windows下的网卡Teaming
  3. mysql求表中年龄同张三,mysql子查询与连接查询
  4. openssl版本信息和支持的命令
  5. har文件解析工具_嵌入式MCU也能跑AI?STM32 Cube.AI工具包使用初探
  6. OpenShift 4 之Knative(1) - 创建Knative无服务器架构环境
  7. Django(五):视图和路由系统
  8. 计算机网站之TCP报文结构
  9. win7升级win10正式版_Win7免费升级Win10
  10. 音频编码之aac编码原理
  11. vostro3470装win7_dell latitude3470怎么安装win7系统
  12. 我的RHCE认证考试经历
  13. 商务个人邮箱,vip邮箱哪个最好用?外贸邮箱哪个是安全邮箱?
  14. Qt创建设计师自定义控件(Qt Designer自定义控件)
  15. 横向越权和纵向越权(水平越权、垂直越权)
  16. 陕西延安一男子看钓鱼忘拉手刹,爱车溜进鱼塘:自己都惊呆了
  17. 程序员如何保持身心健康?
  18. java中的LinkedList(链表)与ArrayList(动态数组):(1)简单辨析
  19. [ErrorCode]: UnknownHost [RequestId]: Unknown com.aliyun.oss.ClientException: srb-dev-1.LTAI5tF8g6WQ
  20. MTK平台一个花屏重启问题的分析

热门文章

  1. mysql udate 充值_分享下一个mysql的充值记录系统
  2. 【C语言】模拟实现库函数 strcpy(复制字符串内容) 与 strlen(求字符串长度)
  3. 图论 + 数论 ---- CF1325E E. Ehab‘s REAL Number Theory Problem (约数个数 + 枚举 + bfs找最小环)[从图结构优化搜索]
  4. codeforces round #576 div2 D Welfare State(线段树)[单点修改+区间修改]
  5. xsemaphoretake返回_FreeRTOS 计数信号量
  6. 十一届蓝桥杯java组-蓝肽子序列-动态规划
  7. vue @click 绑定多个方法 执行顺序_Vue干货,学完这些就够用了
  8. D - Silver Cow Party POJ - 3268
  9. 文件服务器raid1设置,文件服务器raid1设置
  10. php 绘制圆角矩形,C#_C#画圆角矩形的方法,本文实例讲述了C#画圆角矩形 - phpStudy...