Linux豆知識 109
freeコマンド
公開日:2012年08月03日
freeコマンドは、メモリの利用状況を調べるコマンドです。基本的なコマンドですので、ご存知の方も多いでしょう。しかし、その出力については、誤解しやすいところがありますので、取り上げてみたいと思います。
freeコマンドは、一般ユーザでも利用できるコマンドで、引数なしで実行すれば状況がわかります。
$ free
さて、その際の出力は次のようになります。各項目の単位はキロバイトです。
total used free shared buffers cached
Mem: 1999236 1949760 49476 0 131156 1682684
-/+ buffers/cache: 135920 1863316
Swap: 4030456 483 4029973
ここで、1行目(Mem:の行)を見て、少しぎょっとなる人も多いと思います。
意味をそのまま捉えると、「合計1,999,236キロバイトのうち、1,949,760キロバイトが使われていて、残りは49,476キロバイトしかない」となります。何か大きなプログラムが動いているわけでもないのに、メモリ利用率の高さが異常に大きいですね。ちなみに、Linuxシステムにログインできる方はfreeコマンドを実際に実行してみてください。おそらく、同じように、Mem:の行だけを見ると、利用率が異常に高く見えると思います。
実は、これは異常ではありません。Linuxは、各プロセスにメモリを割り振り、残った容量をバッファとキャッシュに利用し、HDDなどのデバイスへのI/Oを軽減するという仕組みになっています。実際に、上の例では、バッファとキャッシュにかなりのメモリ容量が使われていることがわかりますね。このため、1行目の項目を見ると、残り容量はわずかにしか残っていないように見えるのです。
大事なのは、2行目、「-/+ buffers/cache:」の行です。ここは、1行目のused/freeの値から、buffersとcachedを差し引いた値が表示されます。ここの「used」の項目が、実質的にカーネルやプログラムが利用しているメモリ容量を表し、「free」の項目が「実質的な空き容量」と見做せるところになります。上の例では、「実質的に135,920キロバイトを使用し、1,863,316キロバイトが空いている」となります。メモリには十分に余裕があり、問題がないことがわかります。
3行目の「Swap:」はそのままの意味で、スワップ領域の状況を表します。ここで「used」が大きい場合、スワップ領域に大きな負担がかかっていることになります。なお、0でなくても、値が小さければそれほど心配しなくても大丈夫です。あまり使われないプログラムがスワップ領域に常駐することがありますので、その状況だと考えることもできるからです。いずれにせよ、長期に渡る値の変化に注目することが必要です。
freeコマンドは見方を知らないと誤解してしまいますので、覚えておきましょう。