蓝盟IT外包,炫耀技能! 错误诊断像Linux内核一样的大曝光

发布者:上海IT外包来源:http://www.lanmon.net点击数:1285

蓝盟IT小贴士,来喽!
发现问题
有一天,公司服务器警告,登录机器后发现进程“死于卡”,常规GDB调试没有反应,找Log没有线索,问题似乎已经解决了。
这时候,博主的脑海里浮现了岛国的事情。 是的,错了。 岛国的一休哥、柯南弟、国内的包青天、狄仁杰、国外的夏洛克等大佬,一瞬间就像神助一样。 一定有办法。 是的!
分析问题
让我们先仔细分析一下。 因为进程看起来像是死在卡上的,所以如果卡在用户状态中,该进程的CPU利用率必然很高(死循环等)。 如果卡在内核状态中,则进程应该正在进行IO、网络通信等。 CPU的使用率应该很低。 至今仍能找到进程ID。 如果有进程ID,请尝试运行top命令。
CPU列表示CPU使用率为0%。 此时,我们发现进程几乎不占用CPU。 这基本上表明进程死于内核状态。 进程进入内核状态是因为调用被阻止的系统调用导致操作系统挂起。 如何知道调用了什么样的系统调用?
跟踪过程系统调用
strace命令用于传达这一点,并运行strace命令以查看进程调用了哪些系统调用。
OPS! strace命令也被卡杀死了。 没办法,我想还有别的方法。
跟踪进程用户状态的运行时堆栈
是的。 可以使用pstack命令打印进程的运行时堆栈信息。 此命令无法跟踪内核,但让我们检查用户状态最终调用了什么函数,推测并执行调用了什么样的系统调用。
和strace一样,pstack也被卡杀了。
现在我们能在哪里找到线索?
旧的ps命令绝不过时
可以使用ps命令显示进程的运行状态和等待通道(wchan  )。
WCHAN是什么意思?

文/上海蓝盟  IT外包专家

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部