写点什么

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

作者:派大星
  • 2023-09-11
    辽宁
  • 本文字数:924 字

    阅读完需:约 3 分钟

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%排查命令:


# 获取哪个进程耗费CPU  输入命令后按p排序top -c
# 定位耗费CPU的线程top -Hp pid
# 将进程id转换为16进制printf "%x\n" pid
# 打印堆栈信息即可锁定jstack 9529 | grep '0x4418' -C5 -color
复制代码


  • 无法 kill 进程相关排查命令


# 查找zombie僵尸状态的进程,并锁定父进程ps aux

ps -ef | 僵尸进程id
复制代码


如有问题,欢迎加微信交流:w714771310,备注- 技术交流  。或关注微信公众号【码上遇见你】。




发布于: 刚刚阅读数: 5
用户头像

派大星

关注

微信搜索【码上遇见你】,获取更多精彩内容 2021-12-13 加入

微信搜索【码上遇见你】,获取更多精彩内容

评论

发布
暂无评论
对线面试官 - 绝无仅有真实线上问题排查面试题突击篇_Java 面试题_派大星_InfoQ写作社区