重要なスワップアラートが発生する理由を調べます。次のようなものが見つかります。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
14683 user1 30 10 16.0g 772m 744 S 0.3 0.3 277:24.87 6.5g MATLAB
14576 user1 30 10 8125m 1.1g 736 S 0.3 0.4 261:16.73 4.1g MATLAB
これらのプロセスでは、TIME +列が凍結されています。
私の質問は、上記でこれが何を意味するのですか?
私が理解しているように、停止時間とは、休止状態のプロセスであるか、CPUによって処理されていないことを意味します。ただし、上記の例では0.3%のCPU使用率を示しているため、非常に小さいにもかかわらず、時間列が増加し続けるのではないでしょうか。
これらのプロセスは「終了」していますか?その場合、それらはどのようにクリーンアップされますか?それらを開始したユーザーは、それらを解放するためにそれらを承認する必要がありますか?
sleep 120
などの偽のジョブを実行し、htop
で監視すると、その状態はS
別名 "SLEEP"であり、プロセスTIME
はこの間0:00.00のままであることがわかります。
これは、そのプロセスが0 CPU時間を消費しているためです。これがTIME
列の目的です。特定のプロセスが使用したCPU時間を追跡します。
このカウントは、プロセスが複数のCPUコアで実行できる場合、利用可能な時間よりも多くの時間を消費する可能性があるため、混乱を招くことがあります。ここで起こっていることは、コアの数がXの場合、時間はX * TIMEとして表示されるということです。
あなたがそのような格差を得るかもしれない理由は、TIME +列がリストされたプロセスの死んだ子によって使用されるCPU時間を考慮に入れていないためです。ほとんどすぐに死んでいる子供を産む..
So, the CPU usage is due to spawned children which do not count in the TIME+ column.
「S」スイッチを使用して、累積時間を実行するようにtopを変更できます。
しかし、私はあなたが調査しようとしているものの間違った指標を見ていると思います。
strace -p <pid>
はあなたの友達で、実行中のプロセスとそれが何をしているかを覗くことができます。
Straceには無数のオプションがあります。注目すべきオプションには、-f、-ff、-i、vなどがあります。Straceは最も便利なツールなので、man strace
そして、このような問題のトラブルシューティングに使用できるオプションを探してください