【问题标题】:Process is in interruptible sleep - how to find out what it is waiting for进程处于可中断睡眠 - 如何找出它在等待什么
【发布时间】:2016-06-29 12:25:16
【问题描述】:

我在 Debain on Arm 上运行了一个守护进程。有时这个守护进程挂起/不再响应。当使用“ps ax”查看进程时,stat 列是“Dl”,意思是“不间断睡眠(通常是 IO)”。是否可以找到有关进程正在等待的更多详细信息 - 例如哪个 IO 挂起?

谢谢!

【问题讨论】:

  • 你有没有追踪过这个问题?我在 linux arm 盒子上看到了相同的“Dl”进程问题。我的只是运行 imagemagick 的转换。谢谢!
  • 不,很遗憾没有。

标签: linux process daemon


【解决方案1】:

我对 Jetson Nano(ARMv8,内核架构:aarch64)有同样的问题,它挂在 ptxas 命令上。

首先我们需要了解不间断睡眠状态下的进程是什么意思。请阅读:What is an uninterruptible process?Linux process states

简而言之:不间断睡眠中的进程只能被它正在等待的东西唤醒。不能被任何信号唤醒。

要调查发生了什么,您可以检查进程堆栈

cat /proc/<PROCESS_PID>/stack

在我的情况下是

[nano]<$:~$ sudo cat /proc/6816/stack
[<ffffff80080863bc>] __switch_to+0x9c/0xc0
[<ffffff80081c6fdc>] wait_on_page_bit_killable+0x8c/0x98
[<ffffff80081c7948>] __lock_page_or_retry+0xc0/0xe8
[<ffffff80082029b8>] do_swap_page+0x5d0/0x840
[<ffffff8008204be4>] handle_mm_fault+0x60c/0xa68
[<ffffff80080a36b0>] do_page_fault+0x308/0x518
[<ffffff80080a392c>] do_translation_fault+0x6c/0x80
[<ffffff8008080954>] do_mem_abort+0x54/0xb0
[<ffffff80080833c8>] el0_da+0x20/0x24
[<ffffffffffffffff>] 0xffffffffffffffff

我该如何阻止这种情况发生?

视情况而定。就我而言,我增加了交换大小。

这可能是一个愚蠢的问题,但是有没有办法在不重新启动计算机的情况下中断它?

处于不间断睡眠状态的进程可能偶尔会更改为可中断状态,然后再次回到之前的不可中断状态。所以,你可以试试

while true; do kill -9 <PROCESS_PID>; done

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多