由于进程进入“磁盘睡眠”,如何阻止 Ubuntu 挂起?

joe*_*ker 5 linux freeze sleep process ubuntu

我在 AMD 上使用 Ubuntu 9.04 64 位。当某些进程的 CPU 使用率 % 进入“磁盘睡眠”时,它会定期挂起几分钟。在那段时间里,我无法启动新程序,桌面上的大多数程序都没有响应。

我宁愿它没有挂起并且我的应用程序保持可靠的响应。为什么会发生这种情况,我该如何阻止?

小智 8

处于磁盘睡眠或不间断睡眠状态的进程通常正在等待某些 I/O 操作完成。在这种状态下,它不能被信号唤醒,因此不能使用 SIGKILL 信号终止进程。

我对发生的事情的有限理解是:内核中的 CPU 调度程序维护一个运行队列,它是准备运行的进程列表。当一个进程获得 CPU 时,它要么

  1. 充分利用它的时间片并安排好,或
  2. 它需要等待一个操作的响应,通常是 I/O,请求被转移到睡眠队列,等待事件。

由于#2 而被调度的进程也会向调度程序指示它们在等待事件时是否应该被中断。当它们被信号(通常是设备驱动程序)中断而无法继续正常操作时,它们会指示它们应该只被事件唤醒。这些处于不间断睡眠状态,并将被移动到睡眠队列中。

如果您由于磁盘睡眠而经常遇到系统死机,则可能是以下原因之一:

  • 错误的设备驱动程序
  • 硬件故障(磁盘驱动器?)
  • 挂载的文件系统响应缓慢。

我一次又一次地看到 NFS 文件系统。如果由于某种原因设备响应丢失,该进程将保持睡眠状态,这使得在重新启动之前几乎不可能使用挂载/设备。

如果您认为是硬盘访问导致 I/O 冻结,那么检查驱动器上是否存在坏块或扇区可能是明智之举。