每日一博 | 问题这样查,拒做背锅侠
技术的锅太多,到底该不该你背?
话说这天一大早,那个悲催的中年架构师大刘又被手机微信群给炸醒。部门的运维兄弟在公司微信群里说:
短信的生产环境服务器 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 三板斧的诊断方式,说不定会帮你快速定位、解决线上问题,毕竟快速的解决生产问题会把损失降到最低。
最后,想对大家说一句:
作为程序猿,一定要有程序猿的态度。避免背锅,拒绝甩锅,打破砂锅,从你我做起。
你好,我是四猿外,一家上市公司的技术总监,管理的技术团队一百余人。
我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。
我会把自己的成长故事写成文章,把枯燥的技术文章写成故事。
欢迎关注我的公众号:四猿外

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
KDE 或将更多使用动态窗口装饰
本周有消息称 KDE 的 Dolphin 文件管理器采用了汉堡包菜单,这再次引起了关于 KDE 桌面的客户端与服务器端渲染的讨论。 KDE 开发者似乎仍然反对让客户端负责其窗口的全部渲染的观念,并更倾向于服务器端渲染,但他们现在已经接受动态窗口装饰 DWD(Dynamic Window Decorations)作为 CSD 在特定领域的部分混合体是有帮助的,比如其在 Plasma 的系统托盘中发挥了很好的作用。DWD 是一个旧的 KDE 建议,通过允许应用程序将各种动作传递给窗口管理器,然后将它们放在应用程序的标题栏中,从而将 CSD 的视觉吸引力与 SSD 的一些功能结合起来。 KDE 开发者 Nate Graham 在关于 KDE CSD 与 SSD 装饰的文章中指出,在 KDE Plasma 的系统托盘实现中,他们已经应用了 DWD 的概念。系统托盘的小程序会把各种动作和信息传递给窗口管理器,以便将其显示在标题栏上。尽管 DWD 在这里应用并非有意为之,但事实证明,它在这里工作得非常好,因为系统托盘的弹出窗口没有受到困扰 CSD 的任何其余问题的影响。 此外,文中总结道,与 KH...
- 下一篇
Blender 接下来会开发什么功能?2021 开发规划公布
Blender Foundation在这两天发布了2021年的开发路线图,预览了今年计划在开源3D软件的两个主要版本中发布的功能,下面瑞云渲染就带大家来具体看看。 库覆盖系统的持续工作,新的几何节点和Grease Pencil工具集都将在Blender2.93中推出,目前计划于5月下旬发布。 而Blender 3.0将计划于今年的第三季度发布,它在结构上有较大的的变化,包括新的USD importer插件,新的动画姿势库以及对Blender角色动画工具基础功能的改进。 同时,Blender Foundation还发布了Cycles X,这是对Blender主要生产渲染器的重大更新,将于Cycles3.1中发布。官方23号在油管上发布了一支长达40分钟的介绍视频,大家有时间的可以去看看,不过下面还是先带大家用文字来了解一下。 Blender Foundation揭开了Cycles X的面纱 Blender Foundation称Cycles X即将对软件的生产渲染器进行一次重大的改写,旨在在未来10年内对其进行进一步的验证。 这个新版本将大大缩短现代GPU上的渲染时间和视口交互性,并增加...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6