「free」コマンドでメモリの状態を確認することは知ってるんだけど、どこを見ればいいんだろう?
実際の運用現場でどんな使い方をしているのか知りたい!
こんなお悩みを解決します。
☑本記事の内容
・「free」は何が出来るコマンド?
・「free」コマンドの見方
・覚えておくべきオプション
・現場で確認するポイント2つ
・便利コマンド2つ
☑本記事の信頼性
・Linux運用~構築を約5年経験
・LPIC level3を取得済み
以前の記事でも紹介しておりますが、監視アラートの対応でLinux確認コマンドを使用した経験があります。
その中で今回紹介する「free」コマンドを使用した経験もあります。
率直な感想ですが、「free」コマンドは見方がわかりづらいコマンドである印象です。
僕自身も運用業務をやる際には、google検索や先輩に使い方を確認していました。
「free」コマンドの見方を把握していれば、運用業務がやりやすくなると思います。
前置きはこんな感じにして、本題に入っていきたいと思います。
注意ポイント
本記事のLinuxコマンドについては、RHEL/CentOSにて使用されるコマンドになります。
別のLinux(SUSE/Ubuntu等)とはコマンドが違う場合があります。
その点については、ご了承頂ければと思います。
「free」は何ができるコマンド?
「free」は一言でいうと、「メモリの状況」を確認できるコマンドです。
具体的には、
- メモリ使用量/スワップ使用量
- メモリ空き容量/スワップ空き容量
を確認することができます。
こちらは、僕自身の具体例になります。
実際のLinuxサーバーの運用業務にてメモリ使用量のアラートを検知した際に、
「free」コマンドを使用して確認作業を行っていました。
このように、メモリ使用量等のメモリに関する情報を確認できるコマンドになります。
「free」コマンドの見方
Linux6系とLinux7系で表示が違います。
今回は、どちらのパターンについても紹介していきたいと思います。
Linux6系(RHEL/CentOS)
Linux7系(RHEL/CentOS)
Linux6系(RHEL/CentOS)
freeコマンドの実行結果は、下記のようになります。
では、項目について説明していきたいと思います。
- 「free」コマンドの行
項目 | 説明 |
Mem: | メモリ |
-/+ buffers/cache: | バッファキャッシュとページキャッシュを考慮したメモリ |
Swap: | スワップ |
- 「free」コマンドの列
項目 | 説明 |
total | メモリ/スワップ領域の総容量 |
used | メモリ/スワップ領域の使用量 |
free | メモリ/スワップ領域の空き容量 |
shared | 共有メモリ |
buffer | バッファのキャッシュ |
cached | ページのキャッシュ |
【補足】
・「-/+ buffers/cache:」の「free」について
「Mem」の「free+buffers+cached」で計算したものになります。
Linux7系(RHEL/CentOS)
freeコマンドの実行結果は、下記のようになります。
では、項目について説明していきたいと思います。
- 「free」コマンドの行
項目 | 説明 |
Mem: | メモリ |
Swap: | スワップ |
- 「free」コマンドの列
項目 | 説明 |
total | メモリ/スワップ領域の総容量 |
used | メモリ/スワップ領域の使用量 |
free | メモリ/スワップ領域の空き容量 |
shared | 共有メモリ |
buff/cache | バッファ+キャッシュの値 |
available | キャッシュなどを解放することで利用可能なメモリ量 |
【補足】
・「available」の値について
「/proc/meminfo」の「MemAvailable:」と同様の意味になります。
覚えておくべきオプション
Linux6系とLinux7系で共通のオプションとなります。
オプション | 説明 |
-b | 表示結果をバイト単位で表示 |
-k | 表示結果をキロバイト単位で表示 |
-m | 表示結果をメガバイト単位で表示 |
-s 秒数 | 指定した秒数ごとに表示 |
使用例
- Linux6系(RHEL/CentOS
・メガバイト単位で表示したい場合
[root@tspweb02 ~]# free -m total used free shared buffers cached Mem: 3961 184 3776 0 5 38 -/+ buffers/cache: 140 3820 Swap: 3967 0 3967 [root@tspweb02 ~]#
・2秒ごとに結果を表示させたい場合
[root@tspweb02 ~]# free -s 2 total used free shared buffers cached Mem: 4056432 189084 3867348 192 5676 39812 -/+ buffers/cache: 143596 3912836 Swap: 4063228 0 4063228 total used free shared buffers cached Mem: 4056432 189100 3867332 192 5676 39812 -/+ buffers/cache: 143612 3912820 Swap: 4063228 0 4063228 ^C [root@tspweb02 ~]#
- Linux7系(RHEL/CentOS)
・メガバイト単位で表示したい場合
[root@tspweb01 ~]# free -m total used free shared buff/cache available Mem: 3791 131 3508 8 151 3448 Swap: 3967 0 3967 [root@tspweb01 ~]#
・2秒ごとに結果を表示させたい場合
[root@tspweb01 ~]# free -s 2 total used free shared buff/cache available Mem: 3882252 134808 3592316 8704 155128 3530764 Swap: 4063228 0 4063228 total used free shared buff/cache available Mem: 3882252 134824 3592332 8704 155096 3530780 Swap: 4063228 0 4063228 total used free shared buff/cache available Mem: 3882252 133464 3593692 8704 155096 3532140 Swap: 4063228 0 4063228 ^C [root@tspweb01 ~]#
現場で確認するポイント2つ
実際の運用現場で確認するポイントについて解説します。
①現在のメモリ使用量/空き容量
②スワップ領域使用率
①現在のメモリ使用量/空き容量
Linux6系とLinux7系のそれぞれのOSでの確認方法について紹介したいと思います。
- Linux6系(RHEL/CentOS)
下記、実行結果の赤枠の部分が見るべきポイントです。
こちらの赤枠の部分から、現在のメモリ使用量を把握します。
-/+ buffers/cache:
項目 | 説明 |
used | 現在のメモリ使用量 |
free | 現在のメモリ空き容量 |
【備考】
・Mem行のFreeは何の用途にも使っていない物理メモリとのことです。
※詳しくはこちらのアイティメディアさんの記事に解説があります。
- Linux7系(RHEL/CentOS)
下記、実行結果の赤枠の部分が見るべきポイントです。
こちらの赤枠の部分から、現在のメモリの空き容量を把握します。
項目 | 説明 |
available | 利用可能なメモリ容量 |
備考
・「available」については、下記redhat公式ページに詳しい記載があります。
②SWAP領域使用率
そもそもスワップ領域とは、メモリ容量が足りなくなった時に一時的にしまっておくための領域になります。
スワップ領域は、ハードディスク内にあります。
- Linux6系(RHEL/CentOS)
Linux6系ではこちらの赤枠の部分を確認します。
こちらの赤枠の部分から、現在のスワップ領域の使用量を確認します。
Swap
項目 | 説明 |
total | Swapの総容量 |
used | Swapの使用量 |
free | Swapの空き容量 |
- Linux7系(RHEL/CentOS)
Linux7系ではこちらの赤枠の部分を確認します。
こちらの赤枠の部分から、現在のスワップ領域の使用量を確認します。
項目 | 説明 |
total | Swapの総容量 |
used | Swapの使用量 |
free | Swapの空き容量 |
便利コマンド2つ
①メモリ使用率確認
②スワップ使用率確認
①メモリ使用率確認
運用の現場では、メモリの状況をメモリ使用率で監視していることが多いです。
freeコマンドの実行結果の場合、使用率迄は確認することができません。
そのため、記事にて紹介するコマンドをコピー&ペーストで使用頂くと早いです。
- Linux6系(RHEL/CentOS)の場合
free -m | grep -i buffers/cache | awk '{print $3/($3+$4)*100}'
実行結果
[root@tspweb02 ~]# free -m | grep -i buffers/cache | awk '{print $3/($3+$4)*100}' 75.2525 [root@tspweb02 ~]#
コマンドの内容を説明すると、このような数式でメモリ使用率を求めています。
メモリ使用率を求める数式
メモリ使用率 = buffers/cache(used) / ( buffers/cache(used) + buffers/cache(free) ) × 100
※「buffers/cache(used)」と「buffers/cache(free)」は下記の赤枠の部分です。
- Linux7系(RHEL/CentOS)の場合
free | grep -i mem | awk '{print $7/$2*100}'
実行結果
[root@tspweb01 ~]# free | grep -i mem | awk '{print $7/$2*100}' 40.3703 [root@tspweb01 ~]#
コマンドの内容を説明すると、このような数式でメモリ使用率を求めています。
メモリ使用率を求める数式
メモリ使用率 = available / total × 100
※「available」と「total」は下記の赤枠の部分です。
②スワップ使用率確認
スワップも使用率で監視していることが多いです。
スワップ使用率もfreeコマンドから確認できません。
こちらも、記事にて紹介するコマンドをコピー&ペーストで使用頂くと早いです。
- Linux6系(RHEL/CentOS)の場合
free -m | grep -i buffers/cache | awk '{print $3/($3+$4)*100}'
実行結果
[root@tspweb02 ~]# free | grep -i swap | awk '{print $3/$2*100}' 76.399 [root@tspweb02 ~]#
コマンドの内容を説明すると、このような数式でスワップ使用率を求めています。
スワップ使用率を求める数式
スワップ使用率 = Swap(used) / Swap(total) × 100
※Swap(used)と Swap(total)は下記の赤枠の部分です。
- Linux7系(RHEL/CentOS)の場合
free | grep -i swap | awk '{print $3/$2*100}'
実行結果
[root@tspweb01 ~]# free | grep -i swap | awk '{print $3/$2*100}' 1.64185 [root@tspweb01 ~]#
コマンドの内容を説明すると、このような数式でスワップ使用率を求めています。
スワップ使用率を求める数式
スワップ使用率 = Swap(used) / Swap(total) × 100
※「available」と「total」は下記の赤枠の部分です。
まとめ : Linux6系と7系で確認結果が違う。
今回は、「free」コマンドの使い方から便利なコマンド迄、ご紹介してきました。
Linuxサーバーの運用監視の現場では、よく使用されるコマンドのため、使い方や見方を抑えておきましょう。
特にメモリ/スワップ領域の使用率を確認するシーンは多いです。
(自分が運用監視をやっていた頃は、わからなくてよく計算していました。)
最初はわからないかもしれませんが、使っているとコマンド操作に慣れてきます。
他の確認系コマンドと並行して、freeコマンドも覚えましょう!
今回は、以上です。
【関連記事】