Edited at

メモリ使用量についてのメモ

More than 5 years have passed since last update.

最近、ちょっと調べてみたのでメモ。


全体のメモリ使用量

$ 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