Linux/Ubuntu 上の PS で統計列の値を解釈する方法
Linuxシステムをいじっていて、ps
STAT列が奇妙な文字で並んでいることに気づいても、心配しないでください。これは実際には、各プロセスが何をしているかを示しているのです。ただし、読み方さえ知っていればの話ですが。この情報は、トラブルシューティングや、システムが重く感じる原因の解明、あるいは単にバックグラウンドで何が動いているかを監視する際に、非常に役立ちます。
正直なところ、あの小さな列を解読することで、プロセスIDやリソース使用量の全体像を把握しやすくなります。まるでマシンの秘密の言語を学ぶようなもので、一度理解すれば、裏に潜むパターンや異常な挙動が見えてくるでしょう。さらに、ゾンビプロセスやスタックしたタスクを見つけるのにも便利です。なぜこのような仕組みになっているのかは分かりませんが、STATをざっと見るだけで、リソースを大量に消費したり、永久にスリープ状態になっているスタックしたプロセスが見つかることもあります。
Linux PSコマンドでSTAT列を修正する方法
ターミナルを開く
まず最初に、ターミナルが必要です。UbuntuまたはDebianベースのOSをお使いの場合は、アプリケーションメニューで「ターミナル」を探してください。FedoraまたはCentOSでも同様です。または、 を使うと、Ctrl + Alt + T通常はターミナルが開きます。サーバーやリモートマシンの場合は、SSH経由で接続するかもしれません。これで、プロセス情報を調べる準備が整いました。
ps auxコマンドを実行し、STAT列を確認します。
これを入力してクリックしますEnter:
ps aux
これで、すべてのプロセスとその詳細情報(ユーザー、CPU、メモリ、そして重要なのはSTAT列)が一覧表示されます。特定のプロセスについて知りたい場合は、grepと組み合わせてください。例えば、 のようにps aux | grep process_name
。STAT列を見れば、スリープ状態、実行中、あるいはゾンビ状態かどうかが分かります。
一般的なSTATコードを解読する
STAT列は文字の羅列で、少し難解ですが、意味が分かればかなり簡単です。最も一般的なものは次のとおりです。
R
— 実行中、または実行準備完了。プロセスの舵はハンドルにかかっています。S
— スリープ状態。入力やディスクからのデータなどのイベントを待機しています。永久にスリープ状態になっていない限り、通常は問題ありません。D
— 割り込み不可能なスリープ。通常はハードウェアI/O(ディスクの待機など)によるものです。簡単に終了させることはできないため、Dが頻繁に表示される場合は、ディスクまたはハードウェアに問題がある可能性があります。Z
— ゾンビとは、完了したプロセスがまだ残っていて、親プロセスによるクリーンアップを待っている状態です。親プロセスが子プロセスの完了を適切に処理しないと、ゾンビが蓄積される可能性があります。T
— Ctrl + Zかデバッガーで停止しました。停止ではなく一時停止です。
設定によっては、 のような複合コードが表示される場合がありますSs
。これはスリープ状態とセッションリーダー状態を表します。この状態がずっと続いている場合を除き、これはごく正常な動作です。
追加ステータスコードで追加情報を識別する
メイン文字の横にある追加の記号によって、コンテキストがさらに強化されます。
s
— プロセスはセッション リーダーであり、通常はシェルまたは init です。+
— フォアグラウンドで、ターミナルに接続されます。l
— マルチスレッド プロセス (つまり、複数のスレッドが同時に実行されている)。n
— 優先度が低く、nice 値が低めに設定されているので、CPU サイクルを奪い合うことはありません。
これを知っておくと、プロセスが異常な動作をしたりリソースを大量に消費したりする理由を診断するときに役立ちます。
STAT コラムを読んだ後、何を期待しますか?
何か疑わしい点があれば、プロセスの状態から問題を特定できます。例えば、出力を乱雑にするゾンビプロセス(Z)や、割り込み不可能なスリープ状態(D)に陥ったプロセスなどが挙げられます。これは、高価な監視ツールをインストールすることなく、迅速な診断に役立ちます。Dが大量に表示されたり、Tがスタックしたりしている場合は、ハードウェアのボトルネックや応答しないプロセスが原因となっている場合があります。奇妙なことに、ある設定ではゾンビプロセスは再起動するまで永遠に残り続けるように見えますが、別の設定では親プロセスを強制終了すると、ゾンビプロセスが自然にクリーンアップされることがよくあります。
追加のヒントとよくある落とし穴
スタックしていると思われるプロセスが、実際には待機中またはスリープ状態になっている場合もあることに注意してください。ただし、ゾンビプロセス( )は、親プロセスが適切に待機していなかった、またはクリーンアップしていないプロセスを誤って強制終了したことを示す場合が多いです。このような状況かどうかを確認するには、でZ
親プロセスID(PPID )を確認してください。ps -o ppid= -p
また、ソートも非常に役立ちます。メモリを浪費しているps aux --sort=-%cpu
箇所や、ps aux --sort=-%mem
メモリを浪費している箇所を見つけるために実行してみましょう。誰もがこれを行うわけではありませんが、トラブルシューティングを行う際には大きな効果を発揮します。
まとめ
STAT列を理解すれば、迅速なトラブルシューティングやシステム管理に非常に役立ちます。一度理解しておけば、多くの頭痛の種を回避できる、ちょっとした知識の一つです。スクリプト作成や監視に携わる方、あるいは単にプロセスの動作を知りたい方など、どなたでも習得する価値があります。
まとめ
- 主なプロセス状態の意味を学習します (
R, S, D, Z, T
)。 - ゾンビプロセスが蓄積されていないか確認します。
- わかりやすくするために、フィルター
ps aux | grep [name]
や並べ替えコマンドなどを使用します。 - 追加のシンボルにより、プロセスの役割に関する手がかりがさらに得られることを理解してください。
最後に
これでSTATコードがそれほど怖くなくなり、問題の特定が早まることを願っています。些細なことのように思えるかもしれませんが、これらの状態を理解することは、Linuxの上級者レベルのトラブルシューティングへの大きな一歩です。一部のマシンでは、ゾンビ状態や応答なし状態を回避した後、安定するまでに数回の試行錯誤が必要でしたが、それも学習の過程です。この情報が誰かの時間の節約や、完全な再起動の回避に役立つことを願っています。