はじめに
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 | 新しいアプリがスワップせずに使える容量はどれくらいか。 |
コメント