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/