最近、ちょっと調べてみたのでメモ。
全体のメモリ使用量
$ free
total used free shared buffers cached
Mem: 1697880 217852 1480028 0 9736 68932
-/+ buffers/cache: 139184 1558696
Swap: 917500 16 917484
こんな感じで表示される
-/+ buffers/cache
のused
が実際に使用されているメモリ。
プロセス毎のメモリ使用量
- RSSでソート
$ ps aux --sort -rss
- VSZでソート
$ ps aux --sort -vsize
これでメモリを食ってるプロセスを特定できる。
- RSSの合計
$ ps aux | tail -n +2 | awk -F' ' '{sum += $6} END {print sum}'
で計算できる。(共有メモリとかもあるだろうから実際よりも多めな数字)
それでもメモリが少ない?
Zabbixを見るとやたらUsed
が少ないマシンがあった。
役割が同じ別のマシンをみるともっとUsed
は少ない。
psでプロセス毎の使用量見てみると差がなかった。
- meminfoを見てみる
$ cat /proc/meminfo
MemTotal: 1697880 kB
MemFree: 1476812 kB
Buffers: 11360 kB
Cached: 70192 kB
SwapCached: 12 kB
Active: 149724 kB
Inactive: 34712 kB
Active(anon): 89184 kB
Inactive(anon): 13996 kB
Active(file): 60540 kB
Inactive(file): 20716 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 917500 kB
SwapFree: 917484 kB
Dirty: 31400 kB
Writeback: 0 kB
AnonPages: 102900 kB
Mapped: 58332 kB
Shmem: 296 kB
Slab: 16120 kB
SReclaimable: 8636 kB
SUnreclaim: 7484 kB
KernelStack: 784 kB
PageTables: 7008 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1766440 kB
Committed_AS: 240912 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 9272 kB
VmallocChunk: 34359727456 kB
これをみた時にSlab
の値が大きく違った。(Usedの差分とほぼ同じくらい)
これはカーネル内のメモリ領域らしい。
だから、別に異常な状態ではなかった。
キャッシュ周りを解放する
別に解放しなくてもいいのだけど一応手順を。
- ページキャッシュのみ解放
# echo 1 > /proc/sys/vm/drop_caches
- Slabキャッシュのみ解放
# echo 2 > /proc/sys/vm/drop_caches
- ページキャッシュとSlabキャッシュを解放
# echo 3 > /proc/sys/vm/drop_caches