Linuxでメモリの使用率や使用量などを確認したい場合どうすれば良いのでしょうか?
複数確認のやり方はありますが、どのように使い分ければ良いかわからないといった事もよくあります。
今回はLinuxのメモリの使用率や使用量を確認する方法を複数ご紹介します。
筆者はWindowsサーバーやLinuxサーバーの運用構築を11年間以上おこなってきました。その経験を元に知識を公開していきます!
Linuxでメモリの使用率や使用量を確認する方法
Linuxでメモリの使用率や使用量を確認する方法は2つあります。
- vmstatコマンド
- freeコマンド
この二つのコマンドの例を見ていきます。
Linuxのvmstatコマンド
vmstatコマンドの基礎
vmstatコマンドはLinuxのメモリの使用率だけではなく、CPUなどのリソースを表示してくれます。
vmstatの基本的なコマンドの基礎は以下です。
vmstat 更新間隔(秒数) 更新回数
2つのオプションを省略すれば、どちらも1が使用されます。
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 752740 3176 130200 0 0 106 5 48 90 0 0 99 0 0
[root@localhost ~]#
vmstatコマンドでメモリの使用量を表示する項目をまとめます。
項目 | 意味 |
---|---|
swpd | 使用中の仮想メモリの量 |
free | 空きメモリの量 |
buff | バッファのメモリ量 |
cache | キャッシュのメモリ量 |
今の環境では仮想メモリは0で使用していません。
使用していないメモリの使用量がfreeで約752Mです。
バッファメモリが約3Mです。
キャッシュメモリが約130Mです。
vmstatでメモリの時間推移を調査する
vmstatで間隔と回数を指定する事で、メモリ使用量の推移を調査できます。
[root@localhost ~]# vmstat 3 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 752456 3176 130312 0 0 2945 109 462 1279 9 10 81 0 0
0 0 0 752436 3176 130312 0 0 0 0 74 119 0 0 100 0 0
0 0 0 750388 3176 130312 0 0 0 0 74 122 0 0 100 0 0
0 0 0 750388 3176 130312 0 0 0 3 69 115 0 0 100 0 0
0 0 0 750388 3176 130312 0 0 0 0 74 117 0 0 100 0 0
[root@localhost ~]#
3秒ごとに5回メモリ使用量を確認しました。
メモリに負荷をかけて圧迫してみる
Linuxでメモリに負荷をかけテスト出来るコマンドがあります。
stress --vm 1 --vm-bytes 600M --vm-hang 0
stressコマンドです。
Linuxのstressコマンドのオプションを以下で説明します。
項目 | 意味 |
---|---|
–vm workの個数 | 生成するworkerの個数を指定 |
–vm-bytes 圧迫量 | workerに割り当てるメモリサイズをバイトで指定(K,M,Gなど) |
–vm-hang | workerを解放するまでの時間を指定(秒)、0は解放しない |
workerを1つ作成して600Mの負荷を与え続けます。他の端末からログインして「vmstat 3」で3秒間のリソース推移を見てみます。
[root@localhost ~]# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 370436 3176 495644 0 0 429 261 230 194 9 1 89 0 0
0 0 0 370436 3176 495644 0 0 0 0 11 14 0 0 100 0 0
0 0 0 370436 3176 495644 0 0 0 0 16 21 0 0 100 0 0
0 0 0 76864 252 176016 0 0 1359 0 120 40 0 9 91 0 0
0 0 0 73292 252 180092 0 0 0 0 17 16 0 0 100 0 0
0 0 0 73292 252 180092 0 0 0 0 14 19 0 0 99 0 0
0 0 0 73292 252 180092 0 0 0 0 9 13 0 0 100 0 0
4行目から負荷をかけました。メモリのfreeとbuffとcacheの領域が大幅に減っています。
その他のリソースではioのinが増えました。CPUも負荷を与えた瞬間はアイドルタイム(遊休時間)が少し減っています。
日付や時刻の項目を追加する
日付や時刻の項目を追加する場合は以下のようにします。
vmstat 間隔 | awk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 }'
[root@localhost ~]# vmstat 3 | awk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 }'
2024/04/29 18:25:19 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
2024/04/29 18:25:19 r b swpd free buff cache si so bi bo in cs us sy id wa st
2024/04/29 18:25:19 2 0 0 749164 3176 130436 0 0 296 12 105 218 1 1 98 0 0
2024/04/29 18:25:22 0 0 0 749164 3176 130436 0 0 0 0 49 75 0 0 100 0 0
2024/04/29 18:25:25 0 0 0 749164 3176 130436 0 0 0 0 56 80 0 0 100 0 0
2024/04/29 18:25:28 0 0 0 749164 3176 130436 0 0 0 0 51 78 0 0 100 0 0
2024/04/29 18:25:31 0 0 0 749164 3176 130436 0 0 0 1 57 76 0 1 99 0 0
2024/04/29 18:25:34 0 0 0 749164 3176 130436 0 0 0 0 55 80 0 0 100 0 0
日付時間付きの3秒間隔でメモリ使用率を確認できました。
ログファイルに出力する方法
ログファイルに出力して後から確認したい場合もあると思います。そういった場合にはリダイレクトを使用します。
vmstat 間隔 | awk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 } { system(":") }' > ファイル名
1秒間隔のメモリの使用率を「memoryusage_check.log」というファイルに出力しました。
vmstat 1 | awk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 } { system(":") }' > memory_usage_check.log
終了するにはCtrl+CかCtrl+Zで終了します。
memory_usage_check.logのファイルが出来ていますのでcatコマンドで見てみます。
[root@localhost ~]# cat memory_usage_check.log
2024/04/29 18:29:53 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
2024/04/29 18:29:53 r b swpd free buff cache si so bi bo in cs us sy id wa st
2024/04/29 18:29:53 2 0 0 748240 3176 130440 0 0 187 8 81 157 1 1 99 0 0
2024/04/29 18:29:54 0 0 0 747992 3176 130452 0 0 0 0 53 82 0 0 100 0 0
2024/04/29 18:29:55 0 0 0 747992 3176 130452 0 0 0 0 74 79 2 1 97 0 0
2024/04/29 18:29:56 0 0 0 747992 3176 130452 0 0 0 0 65 78 0 0 100 0 0
2024/04/29 18:29:57 0 0 0 747992 3176 130452 0 0 0 0 63 77 1 1 98 0 0
2024/04/29 18:29:58 0 0 0 747992 3176 130452 0 0 0 0 55 69 1 1 98 0 0
2024/04/29 18:29:59 0 0 0 747992 3176 130452 0 0 0 0 71 80 1 0 99 0 0
[root@localhost ~]#
ログに出力されてメモリ使用量が確認できています。
Linuxのfreeコマンド
次にfreeコマンドです。
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 1014540 129912 750908 6964 133720 742824
Swap: 839676 0 839676
[root@localhost ~]#
メモリの使用量や空きメモリなど一通り表示されています。
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 990M 126M 733M 6.8M 130M 725M
Swap: 819M 0B 819M
[root@localhost ~]#
freeコマンドで負荷検証行う
先程と同じ様に負荷をかけて値を確認します。
stress --vm 1 -vm-bytes 600M --vm-hang 0
負荷をかける前とかけた後のfreeコマンドの結果を確認します。
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 990M 141M 665M 6.8M 183M 706M
Swap: 819M 0B 819M
[root@localhost ~]#ここでもうひとつのログインした端末から負荷をかける
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 990M 743M 63M 6.8M 183M 105M
Swap: 819M 0B 819M
usedが141Mだったのが約600M増えて743Mになっています。Swapは変化なしです。
メモリ以上の負荷をかけて値を確認します。
stress --vm 1 -vm-bytes 900M --vm-hang 0
負荷をかける前とかけた後のfreeコマンドの結果を確認します。
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 990M 141M 664M 6.8M 183M 706M
Swap: 819M 0B 819M
[root@localhost ~]#ここでもうひとつのログインした端末から負荷をかける
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 990M 898M 58M 828K 34M 5.5M
Swap: 819M 461M 358M
usedが141Mだったのが、ほぼtotalの898Mになっています。Swapが461M使用されています。
Linuxでメモリ以外でリソースを確認するコマンドについて
Linuxの物理ディスク確認コマンドについて
Linuxのファイルシステムの容量確認コマンドについて
Linuxのファイルやディレクトリの容量確認コマンドについて
まとめ:Linuxでメモリの使用率や使用量を確認する方法
Linuxでメモリの使用率や使用量を確認する方法は2つあります。
- vmstatコマンド
- freeコマンド
vmstatコマンドの特徴
メモリ以外のリソース(CPUやI/O)も表示できる。
間隔や回数を指定してメモリ使用量の推移などを見れる。
freeコマンドの特徴
メモリの使用率などを確認できる。-hオプションで単位をわかりやすく表示してくれます。