Linuxの負荷状況の確認で使う時に最低限知っておきたいコマンド3選

サーバー

はじめに

Linux系のサーバ維持業務などをしていると、「サーバが重いみたいなんだけど?」とか「メモリ足りてるの?」とか言われることがある。そんな時によく使う3つのコマンドの使い方とかを紹介します。

コマンド 利用する場面や目的
vmstat システム全体の負荷状況を確認する
top コンピュータリソース(CPUやメモリ)を使っているプロセスを特定する
free 利用に関する情報のみを出力する

尚、本項で取り扱うコマンドはcentos7にて検証しており、かつ標準状態で使えるものを対象とします。

vmstat

最も基本的なコマンド。まずはこれを使えば良いです。

使い方

●2秒に1回結果を出力する

[user01@localhost ~]$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  0     44 154784 199172 1462552    0    0     0     1   14   18  0  1 99  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  215  465  0  0 100  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  199  402  0  1 99  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  175  388  0  0 100  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  196  432  0  1 99  0  0
^C

「control」+「c」で終了できる。

●2秒に1回結果を出力し、5回出力したら終了する

[user01@localhost ~]$ vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  0     44 154784 199172 1462552    0    0     0     1   14   18  0  1 99  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  215  465  0  0 100  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  199  402  0  1 99  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  175  388  0  0 100  0  0
 0  0     44 154784 199172 1462552    0    0     0     0  196  432  0  1 99  0  0

読み方

分類 記号 内容
procs r 実行待ちプロセスの合計
b スリープ状態のプロセス数
memory swpd 使用中のスワップ領域(仮想メモリ)の量
free 空きメモリの量
buff バッファとして使用しているメモリの量
cache キャッシュに使用している量
inact アクティブではないメモリの量
active アクティブなメモリの量
swap si ディスクからスワップインしているメモリの量
so ディスクからスワップアウトしているメモリの量
io bi HDDなどから受け取ったブロック数
bo HDDなどに送ったブロック数
system in 1秒あたりの割り込み回数
cs コンテンクストスイッチの数
cpu us ユーザーの処理に使用した時間
sy システムの処理に使用した時間
id アイドル時間
wa I/Oの待ち時間
st 仮想マシンから盗まれた(steal)された時間

詳しい読み方(一部)

procs

●r (ランタイム待ちのプロセス数)
「実行キュー」に入っているプロセス数のことで、簡単にいうと処理待ちで並んでいる状態のプロセスの数です。

0~2程度であれば問題ありませんが、ここの数字が高いと、CPUの処理が追いついていないため、サーバの負荷が高い可能性があります。

●b 割り込み不可能なスリープ状態にあるプロセス数
bはdiskのI/O完了待ちになっているプロセス数です。

ディスクI/Oとは、ハードディスクなどの外部記憶装置(ストレージ)に対するデータ読み書き(Input/Output)操作のこと。もしくは、そのような操作にかかる時間や速さです。

つまり、実行中にもかかわらず、ディスクやネットワークなどのI/O待ち状態に入って、実際には実行できてないプロセスの数です。

こちらも通常は0~2程度です。

memory

●swpd 仮想メモリの量(KB)
使用しているスワップ領域の量です。

●free 空きメモリの量(KB)
純粋に未使用状態なメモリの量です。
ただし、メモリの仕様上空きメモリが増えると、その分をcacheにまわすため、この値が低いから「メモリ不足だ!」と断定はできません。

●buff バッファに用いられているメモリの量(KB)
主にカーネルがバッファ領域として使用しているメモリ量です。

●cache キャッシュに用いられているメモリの量(KB)
ディスクアクセス時にキャッシュデータを保存しているメモリの量です。

top

続いてtopコマンドについてです。topに関しては、vmstatの内容に加えて、プロセス毎のリソースの利用状況が見えるのが特徴です。また、CPUやメモリの使用率順でソートしたりする機能や、コア/プロセッサ単位での状況が確認できるなど、色々な機能を有しています。

使い方

[user01@localhost ~]$ top
top - 00:59:48 up 1:28, 0 users, load average: 0.06, 0.03, 0.01
Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2027880 total, 304888 free, 347632 used, 1375360 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1490332 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 11828 2876 2492 S 0.0 0.1 0:00.07 bash
18 root 20 0 56212 3832 3276 R 0.0 0.2 0:00.11 top

専用の表示画面にいろんな情報が表示されます。また、本情報はリアルタイムで表示しており、デフォルトでは3秒ごとに更新されます。

更新頻度の変更(秒数指定)

ちなみに下記のオプションを使うと更新時間を変更することが可能です。

top -d 5(更新頻度の秒数を指定する。この場合5秒)

終了方法

「q」を押すと終了できる。

表示順をソートする

実行画面表示中に下記のキーを押すとソートが可能
CPU順 Shift + p
メモリー順 Shift + m
実行時間順 Shift + t

ハイライト表示に変更する

実行画面表示中に「z」キーを入力するとハイライト表示される

コア/プロセッサ単位での状態を見る

実行画面表示中に「1」キーを押すと表示の切り替えが可能。

●切り替え前(平均値)

%Cpu(s):  0.2 us,  1.2 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

●切り替え後

%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.7 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

CPUの利用率を確認したい

3行目の「id」の値を確認してください。
idはidle(空き)率のことで、高い値の場合は余裕があることを表します。逆に言えば、この値が低いと負荷が高いことを表します。

%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

メモリの使用率を確認したい

4行目の「free」の値を確認してください。
空き容量のことなので、freeの値が低い場合はメモリ使用率が高くなっている状態と読み取れます。

KiB Mem : 2027880 total, 304888 free, 347632 used, 1375360 buff/cache

各行毎の説明

●1行目

top - 00:59:48 up 1:28, 0 users, load average: 0.06, 0.03, 0.01

左から現時刻、稼働時間、ログインしているユーザー数、ロードアベレージを表します。
ちなみに「uptime」コマンドでも同様の結果が表示されます。

●2行目

Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie

タスクの情報を表示します。
左から合計、実行中、休止中、停止中、ゾンビです。
ゾンビプロセスが残っている場合は、プロセスが意図せず起動している可能性があるので、
killコマンドなどを使って停止する必要があります。

●3行目

%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

CPUの情報を表示します。
idはidle(空き)率のことで、高い値の場合は余裕があることを表します。
逆に言えば、この値が低いと負荷が高いことを表します。

usとsyはユーザーとシステムそれぞれのCPU使用率です。

●4行目

KiB Mem : 2027880 total, 304888 free, 347632 used, 1375360 buff/cache

メモリの情報を表示します。
freeの値が低い場合はメモリ使用率が高くなっている状態と読み取れます。

※freeコマンドでも同様の結果を確認できます。

●5行目

KiB Swap: 1048572 total, 1048572 free, 0 used. 1490332 avail Mem

スワップの情報を表示します。正直あんまり見ないです。
しかし、usedの値が0でない場合はスワップアウトが発生しているので、
メモリ負荷が高くなっていると言えます。

●6行目以降

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 11828 2876 2492 S 0.0 0.1 0:00.07 bash
18 root 20 0 56212 3832 3276 R 0.0 0.2 0:00.11 top

psコマンドと同じようにプロセスの状況を確認することができます。

free

メモリの使用料を確認する際に利用します。また、オプションで「-m」を付与することで、表示容量が「MB(メガバイト)」になります。

[user01@localhost ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1999         224         151           0        1623        1593
Swap:          1023           0        1023

読み方

項目 内容
total 実メモリの全容量
used 実メモリの使用容量
free 実メモリの空き容量
shared 共有メモリ容量
buff/cache バッファとキャッシュの合計
available 新しいアプリがスワップせずに使える容量はどれくらいか。

コメント