Linux 进程挂起与核心转储问题排查指南
1. 识别进程挂起问题
当进程出现挂起现象时,简单地使用 -9 ( sigkill )杀死进程,或者重启操作系统(除非是陈旧文件句柄问题),都很难找到进程挂起的根本原因,而且无法防止此类异常再次发生。不过,我们可以运用进程创建和资源使用的相关知识来找出问题根源。
当发现进程挂起时,首先要使用 ps 命令确定该任务的关键信息,包括任务状态、线程、优先级、父进程和等待通道等,同时要明确其累积 CPU 时间和初始启动时间。因为仅靠一个 ps 命令无法获取所有必要信息,所以需要采用全面的方法。
有时候,进程看似被阻塞,实际上可能正在进行计算或非阻塞 I/O 操作。如果累积 CPU 时间持续增长,任务状态很可能是 R (运行中),此时进程在运行队列中,没有等待通道。持续监控其累积 CPU 时间,如果进程一直处于运行队列,可能是在进行耗时的计算,即使是世界上最快的计算机计算无限循环也需要时间。但要注意,处于运行状态的进程可能是程序的正常操作、应用程序的“特性”,也可能是驱动程序问题。
如果某个问题进程以极高的速率消耗系统资源,导致生产应用程序资源匮乏,在可以杀死该进程的情况下,这样做是合理的。然而,有些进程无法被杀死。当进程的时间片耗尽时,它会以给定的优先级进入 sleep() 状态。当进程的优先级低于 PZERO 时,它处于不可中断状态,无法接收信号,但信号可以排队,对于某些操作来说,这是正常的。而对于那些程序挂起且无法
超级会员免费看
订阅专栏 解锁全文
86万+

被折叠的 条评论
为什么被折叠?



