首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >对线面试官 - 绝无仅有真实线上问题排查面试题突击篇

对线面试官 - 绝无仅有真实线上问题排查面试题突击篇

作者头像
@派大星
发布2023-09-08 17:20:08
发布2023-09-08 17:20:08
5630
举报
文章被收录于专栏:码上遇见你码上遇见你

Tips:涉及到的命令会在后面统一整理出来方便使用。

面试官:如果线上服务器CPU 100%了,该如何排查、定位和解决?这个有遇到过吗?可以简单聊聊吗?面试官心理分析

主要是想要考察你有没有处理过高负载的线上问题场景。

派大星:首先我们要通过定位具体是哪个进程耗费CPU,可以使用top -c命令。这样可以显示进程列表,然后输入P,便会按照CPU的使用率进行排序。如图所示:

通过top -c定位到具体是哪个进城后,接下来要定位耗费CPU的线程;可以通过命令top -Hp pid,这里的pid就是进程id。然后输入P,就会按照cpu的使用率排序。如图所示:

找到耗费CPU较高的线程之后,便可以通过命令printf "%x\n" pid这里命令是要把线程pid换成16进制的。如图所示:

然后通过命令jstack 进程id | grep '0x加上刚刚计算出来的16进制' -C5 -color打印堆栈信息。比如:jstack 9529 | grep '0x4418' -C5 -color这样就可已锁定是哪个方法出现了问题。

面试官:如果遇到线上进程kill不掉怎么办?你应该如何排查处理?面试官心理分析:

主要是想要考察你有没有遇到过线上的问题,如何应对及处理

派大星:很巧,在线上确实有遇到过类似的问题,在说解决问题的方案的时候先聊一下我们线上发布流程背景。我们有自己的一套线上发布的流程系统,就是在每次部署的时候会从git仓库上去自动拉去代码,然后根据profile,Maven会自动打对应环境的包。然后进行发布。

系统发布是由发布系统的进程创建的子进程去发布的。当时出现一个现象是无论怎么kill 系统的进程都无法杀死,

后来通过命令ps aux查看到系统进程的哪种数据的status那列是zombie状态,也就是僵尸进程。解决方案可通过ps -ef | 僵尸进程id ,找到父进程,然后kill掉父进程即可。

面试官:嗯,可以。确实有处理过线上问题。回去等消息吧。看好你喔。

  • 线上CPU 100%排查命令:
代码语言:javascript
复制
# 获取哪个进程耗费CPU  输入命令后按p排序
top -c

# 定位耗费CPU的线程
top -Hp pid

# 将进程id转换为16进制
printf "%x\n" pid

# 打印堆栈信息即可锁定
jstack 9529 | grep '0x4418' -C5 -color
  • 无法kill进程相关排查命令
代码语言:javascript
复制
# 查找zombie僵尸状态的进程,并锁定父进程
ps aux


ps -ef | 僵尸进程id 


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码上遇见你 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档