加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘孜站长网 (https://www.0836zz.com.cn/)- 运维、物联设备、数据计算、智能推荐、云管理!
当前位置: 首页 > 站长资讯 > 动态 > 正文

Bug 排查大曝光

发布时间:2021-04-06 14:58:47 所属栏目:动态 来源:互联网
导读:些编程高手除了写代码很厉害之外,调试代码找 bug 更是手到擒来。编写代码只是程序员的工作之一,调试代码的时间甚至会超过编写代码,之前为大家讲解了很多关于系统、架构、编程等方面的内容,这篇文章就为大家全方位展示一次涉及到内核的 bug 排查过程。 发

些编程高手除了写代码很厉害之外,调试代码找 bug 更是手到擒来。编写代码只是程序员的工作之一,调试代码的时间甚至会超过编写代码,之前为大家讲解了很多关于系统、架构、编程等方面的内容,这篇文章就为大家全方位展示一次涉及到内核的 bug 排查过程。

发现问题

话说一天公司服务器报警,登录到机器后发现进程已被“卡死”,常规 GDB 调试没有反应,查找 Log 也没有线索,问题似乎已经无解。就在这时博主的脑海里浮现出了岛国的。。是的,你猜错了,是岛国的一休哥、柯南弟、国内的包青天、狄仁杰、国外的夏洛克等一众大佬,瞬间有如神助,一定还有办法!是的!

分析问题

先来仔细分析一下,既然进程看上去被卡死,那么如果被卡在用户态,那么该进程 CPU 使用率必然很高(死循环之类);如果被卡在内核态,这时进程应该正在进行 IO 或者网络通信等,那么 CPU 使用率应该会很低,现在还能查到进程ID,有了进程ID运行 top 命令看一下注意 CPU 那一列,显示 CPU 占用率为0%,我们发现此时该进程几乎没有占用CPU,这基本上是在告诉我们该进程是被卡死在内核态,进程要进入内核态那么就是因为调用了某个阻塞式系统调用导致被操作系统挂起,那么该怎么知道进程调用了什么系统调用呢?

跟踪进程系统调用

strace 命令就用来告诉你这个的,运行 strace 命令来查看一下此时进程调用了什么系统调用:

(编辑:甘孜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读