Web制作・開発会社 プレスマンのスタッフブログ

PRESSMAN*Tech

Linuxでのメモリの使用量を考えてみる

Linuxのメモリ使用量は難しいです。
細かい解説はググるとでてきますが、結局何を使えばいいんだということでシンプルに。

free

freeは -/+ buffers/cache:のfreeの列(free+)を使いましょう。

freeコマンドを打つと

とでます。素直に読むとfreeが656296しか残っていなくてメモリを98%使ってしまっています。これはヤバイ!
ただ、実際はbuffers,cachedも再利用可能なメモリを含んでいます。
なので、free+ = free + buffers + cachedになっていて、これが空いているメモリと再利用可能っぽいキャッシュを足した数値です。

ただ、これは正確に使用できるメモリを表している訳ではありません。正確にメモリの使用量でアラートをだせとか言われると結構面倒です。

vmstat

もう少し詳しくみてみると。

memoryにinactとactiveが増えました。

Buffers + Cached = active+ inact

っぽいですね。

/proc/meminfo

もっと詳しく見てみます。

なんだか
ActiveとInactiveはfileとanonにわかれています。色々読んでみて自分なりにまとめたのが以下です。

Active最近使われたメモリで、どうしても必要な時以外は他の目的に再利用できないと書いてあったりしますが、Inactiveから優先に使われるだけとも書いてあったり。どうしても必要な時とか、最近使われたとか抽象表現多いです・・・。
Inactive最近使われていないし、他の目的に使っていい。
(file)ファイルに書き出せば消しちゃっていいメモリ。つまりディスクと同期がとれていればすぐ使える。
(anon)mallocなんかで確保したメモリ。使いたかったらスワップしないとだめ。

結局

Buffers + Cached = Active(file) + Inactive(file) + Shmem

であり、共有メモリは(大体)Active(anon)+Inactive(anon)に含まれるようです

結論として、利用可能なメモリはを以下採用しています。

free+ Inactive(file) + Active(file)

Active(file)には、Disk未同期(書き込み終わるまで使えない)がありますが、通常の状態で

  • Dirty: The total amount of memory waiting to be written back to the disk.
  • Writeback: The total amount of memory actively being written back to the disk.

を見ても非常に少ないです。気になるようならこの値を引いてもいいとは思います。

これをzabbixへ送ることができる用にmeminfoから計算するスクリプトは以下の通りです。

参考URL
http://d.hatena.ne.jp/enakai00/20110906/1315315488

http://shinh.skr.jp/m/?date=20100516

http://linux.cloudibee.com/2008/02/know-about-procmeminfo/