kill -9 挂起,无法杀死进程(谋杀证明进程)

jwb*_*ley 9 kill process-management

可能的重复:
如果“kill -9”不起作用怎么办?

我想问这个有点晚了,但供将来参考;

今天,在一位客户报告说使用 ssh 连接很慢并且执行命令也很慢(有些根本不起作用)之后,我被要求查看服务器。

登录后,我可以立即输入,所以我不认为这是延迟或带宽饱和等网络问题(因为我发现这往往与您的 ssh 体验直接相关)。我首先尝试运行top,一分钟没有发生任何事情后,我用 CTRL+C 取消了此操作。提示挂起等待top启动。

free -m 在我取消之前,也只是在提示处挂了一分钟或更长时间。

df -h 确实执行了,并向我展示了 60% 的可用磁盘空间(我想知道是否有一些应用程序出问题并用日志填满了磁盘)。

dmesg 也不会执行。

我执行了tail -n 50 /var/log/message,遗憾的是我不再有输出,但看起来有一个严重的问题。以十六进制打印的大量内存位置,大概它们的内容(难以理解的杂乱无章)在右侧。它与我在谷歌上找到的这个日志中的输出非常相似,试图找到一个类似的例子,除了在右手栏中的大部分行中都包含“ext4”,也许是文件系统错误?

跑步tail -n 50 /var/log/syslog我看到在所有的记忆疯狂中间,这里重复了几行,说对Info procname:pid blocked for more than 120 seconds.

我执行ps aux并查看输出,直到找到一个 CPU 使用率为 299% 的进程;

ps aux | grep procname

procuser    8279  299  0.0 479064 41916 pts/6    Sl+  08:05 548:31 /path/to/procname procbox 6390 6394 6395 0
Run Code Online (Sandbox Code Playgroud)

所以这个过程看起来很疯狂,但我无法执行任何与内存相关的命令(有或没有 sudo)。例如free -m,或top。我可以cat /proc/meminfo看到 40GB 的 RAM 中有大约 5GB 可用。

我试过了,kill PID但挂了几分钟后我放弃了。我kill -9 PID再次尝试,同样的事情。我只能假设这个进程太忙了,以至于它无法回答来自内核的终止消息?我试过了renice 19 PIDkill -9 PID但这也不起作用,renice会运行,只是挂起。

最后需要硬重启,这并不理想。由于服务器上的专业应用程序,文件现在已损坏等。我还有什么其他选择?

有没有办法简单地停止一个过程?而不是发送 SIGTERM,只是完全停止代码的处理,或类似的?

Jim*_*ris 9

我执行了 tail -n 50 /var/log/message ,遗憾的是我不再有输出,但看起来有一个严重的问题。以十六进制打印的大量内存位置,大概它们的内容(难以理解的杂乱无章)在右侧。

它几乎可以是任何东西,这些内核转储的内容对于了解它是什么很重要。

例如,您可能遇到了硬件问题,例如磁盘不再响应请求。尝试运行已经缓存在 RAM 中的程序可以正常工作,而运行需要从磁盘读取的程序可能会挂起。

也可能是您遇到了内核错误或其他一些驱动程序问题,或者您的 RAM 中出现了错误的位翻转,或者几乎任何其他坏硬件。如果驱动程序锁定了内核中的特定资源,然后遇到错误或错误并且无法正确解锁它,那么任何其他试图获取该锁的驱动程序或系统调用都会挂起。

它可能不是内核中的错误。例如,当使用 lvm 或 dmsetup 工具来管理磁盘时,您会得到这种行为。它们都可以挂起设备,结果是“只要设备挂起,对该设备的任何进一步 I/O 都将被推迟”。然后尝试访问该设备的程序将简单地阻塞在内核中。您可以使用“dmsetup suspend”手动触发此操作,或者当 LVM 工具遇到错误时,我看到磁盘意外处于挂起状态。

如果这是一次性的事情,请不要担心。如果它再次发生,请尝试仔细记录内核输出,以便找出其原因。第一次故障转储将是最重要的。如果这种情况经常发生并且您无法获得输出,请考虑使用netconsole将内核输出直接发送到另一台机器。