この特定のmakeプロセスに対して中断できない深いスリープ状態に入るのはなぜですか?

この特定のmakeプロセスに対して中断できない深いスリープ状態に入るのはなぜですか?

'D'現状を正確に把握しようとしています。

私の場合、次のプロセスは'D'次のようになりました。

make -f freac/CMakeFiles/freac_objs.dir/build.make freac/CMakeFiles/freac_objs.dir/build

NFS共有を使用します。

部下も増えている。 load_avgは現在1600(40 CPU)です。私は40個のプロセッサが許容可能な制限だと思います。

さて、ところで、私は3つを知りたいです:

  1. 'D'プロセスが状態にあるときに負荷が増加するのはなぜですか?
  2. 'D'プロセスが完全に終了せず、NFS共有にアクセスするのが難しい状態になるのはなぜですか?
  3. NFS共有にアクセスする際に突然問題が発生するのはなぜですか(主にネットワークの問題が原因ですか?)

ありがとうございます!

ベストアンサー1

ステータス「D」のプロセスは通常(常にではありませんが)「I / Oを待っている間にブロックされます」。たとえば、ディスクが使用中でサービス時間が長い場合、これが発生する可能性があります。その状態のプロセスは、D実際のCPUリソースを使用しなくてもロード平均に含まれます。

NFSの場合、プロセスはNFSサーバーの応答を待っている「D」状態で多くの時間を費やす可能性があります。

NFSクライアントのデフォルトの動作は、再試行する前に最大60秒間再試行することです(timeoのオプションを参照man nfs)。これは、問題が発生した場合、プロセスが少なくとも60秒間I / Oを待機できることを意味します。

次の作業はretrans設定とhard/soft設定によって異なります。

ファイルシステムがマウントされるとhard無期限に再試行され、マウントするとsoft最終的にI / O要求が失敗します。ただし、timeoオプションはretransこれがすぐには発生しないことを示しています。

クライアントはいくつかの理由でNFSの問題を見ることができます。一般的な理由はネットワーク帯域幅です(特にWiFiネットワークを使用している場合)。もう1つの理由は、要求ボリューム(並列に実行された場合にボトルネックが発生する可能性がある)です。ディスクのパフォーマンスが悪いため、サーバー自体がNFS要求に応答するのが遅くなる可能性があり、サーバーが多数の要求を処理するのに十分なデーモンスレッドを実行できない可能性があります。

おすすめ記事