元バンドマンITエンジニアの語り場

技術とか趣味とか日々の至福と鬱憤とか

【Linux】topコマンドで実行中のプロセスを確認する

システムの負荷状況を確認したり、システムで実行中のプロセスをリアルタイムで確認する時に使用するのがtopコマンドです。

topコマンドとは


システムで実行中のプロセスをCPU使用率が高い順に表示するコマンドのこと。 top実行中はリアルタイムで更新されていく。終了させたい場合は「q」(quit)を押下する。

topコマンドの出力結果


f:id:Mickey6:20210518234038p:plain

まずはざっくりと。
実行結果の1行目にはシステムの稼働状況、2行目には実行プロセス数、3行目にはCPUの状態、4・5行目にはメモリとスワップの状況が表示される。
それ以降はプロセスごとの情報が表示される。

システムの負荷状況について確認したい場合は以下に着目するといいだろう。

①load average

ディスクIO待ちのプロセスの数。つまり、CPUに処理してもらうのを待っているプロセスの数。
単位は個。
左から順に[1分平均]、[5分平均]、[15分平均]の個数。
処理待ちのプロセス数なので、CPUのリソースに余裕があればload averageの値も小さくなる。(スムーズに処理さてている、CPUが休んでいる時間がある) 反対にこの数値が大きいとCPUに負荷がかかっておりシステムのパフォーマンスに影響を及ぼしている可能性がある。

CPUは一度に1つの仕事しかできないが、マルチコア(デュアルコアクアッドコア)の場合、CPUの数だけ同時に処理できる仕事の数が増える。 つまり、load averageの数値が「4.00」だった時、CPUがシングルコアとクアッドコアかで状況は大きく異なってくる。
「load average ≧ コア数」となっている場合はシステムのパフォーマンスが低下してる可能性がある。

②PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

・PID:プロセスID
・USER:プロセスの実行ユーザー
・PR:優先度。高いほど優先。
・NI:nice値。高いほど優先。
・VIRT:割当て済の仮想メモリ容量(スワップ含む)
・RES:Resident Memory Size。物理メモリのうち実際に消費されている容量。
SHR:Shared Memory Size。RESのうち共有メモリとして消費されているメモリ容量。
・S:ProcessStateCode。
・%CPU:CPU使用率。CPUで処理を行った総時間のうち、そのプロセスが処理を行った時間を割合。
・%MEM:メモリ使用率。物理メモリの容量に対する、RESの割合。
・TIME+:CPU時間。プロセスが起動してからCPUにより処理された時間。
・COMMAND:実行プロセス名。

システムのパフォーマンス低下の原因となっているプロセスを特定する場合はCPU使用率とCPU時間に着目すると良い。 (CPU時間が長ければ長いほど、そのプロセスがCPUを占有している時間が長いということになる。)

不要なプロセスがCPUに負荷を与えていた際はkillコマンドにてプロセスを終了させる。

# kill <プロセスID>

プロセスを終了させていいのか判断が難しい時はCOMMAND列を見る。 COMMAND列にはそのプロセスを実行される時に使用したコマンド名が表示されるので判断材料になる。
top実行中に[C]を押下することでCOMMANDの詳細情報表示に切り替えることができる。

メモリ使用率も考慮する


システムの動きが悪いので「top」で確認してみると、CPU使用率が高騰しているプロセスがないにも関わらず「load average」の値が大きくなっていることがある。
例えばディスクI/O処理はCPU使用率は大したことがないものの、処理に時間がかかる。
また、メモリーが不足するとスワップ発生量が増加し、ディスクI/O処置も増える。

スワップとは

メインメモリーの空き領域が不足してきた時にOSがメモリー内の最近使用していないデータを退避させてメインメモリーに余裕を持たせようとすること。
退避されたデータはディスクI/O処理で一旦ハードディスクに書き込まれる。(スワップアウト
スワップアウトしたデータが必要になった時はハードウェアから再度読み込む。(スワップイン

各プロセスはメモリーの空き状況を考慮しない。スワップ判断はOSが独自に判断して実行する。
なので、メモリーをどんどん酷使させていくとスワップ量が増え(=ディスクI/Oが増え)、結果としてload averageの値も増える。

スワップ量もtopコマンドで確認できる。

このように、CPU使用率が低いにも関わらず、load averageの値が高くなっているときは、メモリーに大風呂敷を広げているプロセスがないかを確認すると良い。
メモリ使用率もtopコマンドで確認できる。

スワップの注意すべきこと

モリー使用率が高騰し、頻繁にスワップアウトが行われるとスワップアウト先のハードディスクの容量を逼迫してしまう場合も考えられる。
そうなると、OSそのものの動作にも影響が出てしまう可能性があるため、OSはメモリー確保のために起動中のプロセスをランダムに終了させる仕組みがある。

そのような仕組みを「OOM Killer」という。

OOM killerはプロセスをランダムに終了させるので、例えばsshdの終了によるSSHの切断や、
重要なプロセスを終了させてしまうことでシステム障害を引き起こしてしまうなんてことも最悪は起こりうるかもしれない。

なので、OOM Killerは原則回避させる。
そのためにスワップの量が急激に増加している時はメモリーを食っているプロセスやサービスを特定し再起動してあげる。

◆出典

milestone-of-se.nesuke.com