web-dev-qa-db-ja.com

プロセスが「ディスクスリープ」になるためにUbuntuがハングするのを防ぐにはどうすればよいですか?

AMDでUbuntu9.0464ビットを使用しています。プロセスのCPU使用率の一部が「ディスクスリープ」に入ると、定期的に数分間ハングします。その間、新しいプログラムを起動できず、デスクトップ上のほとんどのプログラムが応答しなくなります。

私はむしろそれがハングせず、私のアプリケーションが確実に応答し続けたほうがいいです。なぜこれが発生し、どうすれば停止できますか?

5
joeforker

ディスクスリープまたは無停電スリープのプロセスは、通常、一部のI/O操作が完了するのを待機しています。この状態では、シグナルによってウェイクアップできないため、SIGKILLシグナルを使用してプロセスを終了することはできません。

何が起こるかについての私の限られた理解はこれです:カーネルのCPUスケジューラーは、実行する準備ができているプロセスのリストである実行キューを維持します。プロセスがCPUを取得すると、次のいずれかになります。

  1. タイムスライスを完全に活用してスケジュールを設定するか、
  2. 操作(通常はI/O)の応答と、イベントを待機するスリープキューへの要求の転送を待機する必要があります。

#2が原因でスケジュールが設定されているプロセスは、イベントの待機中に中断する必要があるかどうかもスケジューラに示します。信号(通常はデバイスドライバー)によって中断された場合に適切な操作を続行できない場合は、イベントによってのみウェイクアップする必要があることを示します。これらは中断できないスリープ状態にあり、スリープキューに移動されます。

ディスクのスリープが原因でシステムが定期的にフリーズしている場合は、次のいずれかである可能性があります。

  • バギーデバイスドライバー
  • ハードウェア(ディスクドライブ?)の障害
  • 応答が遅いマウントされたファイルシステム。

私はNFSファイルシステムで何度も見ました。何らかの理由でデバイスの応答が失われた場合、プロセスはスリープ状態のままになり、再起動するまでマウント/デバイスを使用できなくなります。

ハードディスクアクセスがI/Oフリーズの原因であると思われる場合は、ドライブに不良ブロックまたはセクターがあるかどうかを確認するのが賢明かもしれません。

7
user4358