【Linux】٩( ᐛ )وメモリの空き状況や使用量を確認する(top、vmstat、free)
-
カテゴリ:
- サーバ
今回はサーバの運用でメモリの状況を確認する際、普段よく使っている方法をご紹介します。
使わないとついつい忘れてしまうコマンドもあるので、しっかりとここにメモておきます。
topコマンド
「top」コマンドはCPUやメモリの状況を確認することができます。。 ٩( ᐛ )و
さらに現在動いているプロセスも秒間隔で一覧表示されるので、まず全体を把握するにはとても便利です。
[user@server ~]$ top
top - 11:35:09 up 1170 days, 8:45, 1 user, load average: 0.02, 0.02, 0.00
Tasks: 154 total, 1 running, 153 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8969544k total, 8087712k used, 881832k free, 254836k buffers
Swap: 1020152k total, 132k used, 1020020k free, 7342612k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 15 0 10348 692 584 S 0.0 0.0 0:06.73 init
2 root RT -5 0 0 0 S 0.0 0.0 0:04.09 migration/0
「Cpu(s):」がCPU、「Mem:」がメモリ、「Swap:」がスワップの情報になります。
それぞれ全体容量(total)、使用量(used)、空き容量(free)がキロバイト表記に表示されています。
vmstatコマンド
メモリ状況に関してさらに掘り下げて確認したい場合は「vmstat」コマンドを使います。
[user@server ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 132 873120 254080 7316324 0 0 5 6 0 0 0 0 100 0 0
オプションに「5」とつけると、5秒間隔でメモリ状況を監視することが可能です。
[user@server ~]$ vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 132 873120 254080 7316324 0 0 5 6 0 0 0 0 100 0 0
0 0 132 873096 254080 7316324 0 0 0 27 1026 96 0 0 100 0 0
0 0 132 873096 254080 7316332 0 0 0 8 1035 90 0 0 100 0 0
0 0 132 873228 254080 7316336 0 0 0 13 1017 77 0 0 100 0 0
0 0 132 873228 254080 7316336 0 0 0 5 1020 83 0 0 100 0 0
0 0 132 873228 254080 7316340 0 0 0 0 1016 78 0 0 100 0 0
0 0 132 873228 254080 7316340 0 0 0 41 1021 87 0 0 100 0 0
「-s」オプションを使うとメモリ状況の詳細が確認できます
[user@server ~]$ vmstat -s
8969544 k total memory
8096316 k used memory
6166724 k active memory
1640768 k inactive memory
873228 k free memory
254096 k buffer memory
7316368 k swap cache
1020152 k total swap
132 k used swap
1020020 k free swap
240719227 non-nice user cpu ticks
10179911 nice user cpu ticks
12059845 system cpu ticks
79834643725 idle cpu ticks
2622936 IO-wait cpu ticks
459034 IRQ cpu ticks
4982804 softirq cpu ticks
0 stolen cpu ticks
4226891813 pages paged in
4795657262 pages paged out
0 pages swapped in
33 pages swapped out
3661599264 interrupts
2907345856 CPU context switches
1468259361 boot time
28187562 forks
しかし注意が必要なのが、メモリの利用可能な空き状況を確認するうえで、単純に全容量と使用量だけでは不十分な時があります。
上記例がいい例で全体容量の「total memory」は8.96GB(端数切捨て値)ほどあり、使用量の「used memory」は8.09GBとなっており残り容量が1GBもないように見えますが、場合によっては違かったりします。
それを確認する場合によく使うのか「free」コマンドです。
freeコマンド
「free」コマンドはメモリの空き容量を表示してくれるコマンドです。
コマンドを実行した例が下記になります。
[user@server ~]$ free
total used free shared buffers cached
Mem: 8969544 8099920 869624 0 254164 7318424
-/+ buffers/cache: 527332 8442212
Swap: 1020152 132 1020020
「-m」オプションを付けるとメガバイト表記になるのでより見やすくできます。
[user@server ~]$ free -m
total used free shared buffers cached
Mem: 8759 7909 849 0 248 7146
-/+ buffers/cache: 514 8244
Swap: 996 0 996
上記例の1行目(Mem:)がメモリの下記状況になります。
totalは8759MBでusedが7909MBなので残り容量は少ないように見えますが、実際はもっと多くの容量を使用することができます。ここで確認するポイントが「cached」になります。
「cached」は重たい処理をする場合に予め確保されている容量なので、実質7146MBは使用可能な容量として考えることができます。
使用量(used)として8GB使用されているように見えても、キャッシュ(cashed)に7GB確保しているので、実際の使用率は1~2割程度ということになります。
さらに手っ取り早く空き容量を確認したいなら2列目の「-/+ buffers/cache:」を見れば分かりやすいです。
これはバッファサイズとキャッシュサイズの差分を表示されており、実質的な使用量と空き容量を確認することができます。
上記例なら実質使用量は514MBで空き容量は8422MBです。
細かい計算は以下の通りです。
- 514[-/+ buffers/cache:used] = 7909[Mem:used] - (248[Mem:buffers] + 7146[Mem:cached])
- 8244[-/+ buffers/cache:free] = 849[Mem:free] + 248[Mem:buffers] + 7146[Mem:cached]