メモリ使用量とスラブ
PCを立ち上げて1日使っていくと使用メモリ(もちろんキャッシュとバッファを引いたもの)がやたら増えていたのが気になったので、再起動時と比較をしてみた。
稼働中いつのまにか779MBになっていた。以後-/+ buffers/cache:の隣の数字に着目。
$ free total used free shared buffers cached Mem: 2067968 1814008 253960 0 287908 746364 -/+ buffers/cache: 779736 1288232 Swap: 0 0 0 $ cat /proc/meminfo MemTotal: 2067968 kB MemFree: 253960 kB Buffers: 287908 kB Cached: 746364 kB SwapCached: 0 kB Active: 642656 kB Inactive: 811592 kB HighTotal: 1170688 kB HighFree: 81296 kB LowTotal: 897280 kB LowFree: 172664 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 268 kB Writeback: 0 kB AnonPages: 419976 kB Mapped: 44080 kB Slab: 349704 kB SReclaimable: 332008 kB SUnreclaim: 17696 kB PageTables: 2432 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 1033984 kB Committed_AS: 682328 kB VmallocTotal: 114680 kB VmallocUsed: 3696 kB VmallocChunk: 110712 kB
起動直後はわずか336MB。
$ free total used free shared buffers cached Mem: 2067968 571936 1496032 0 19384 216488 -/+ buffers/cache: 336064 1731904 Swap: 0 0 0 $ cat /proc/meminfo MemTotal: 2067968 kB MemFree: 1496032 kB Buffers: 19384 kB Cached: 216488 kB SwapCached: 0 kB Active: 357544 kB Inactive: 186340 kB HighTotal: 1170688 kB HighFree: 642960 kB LowTotal: 897280 kB LowFree: 853072 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 2416 kB Writeback: 0 kB AnonPages: 308016 kB Mapped: 42580 kB Slab: 18376 kB SReclaimable: 9136 kB SUnreclaim: 9240 kB PageTables: 2264 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 1033984 kB Committed_AS: 557300 kB VmallocTotal: 114680 kB VmallocUsed: 3548 kB VmallocChunk: 110724 kB
起動してファイルをキャッシュに入れた後。find | xargs cat > /dev/nullを使用。
$ free total used free shared buffers cached Mem: 2067968 1503100 564868 0 75548 1037684 -/+ buffers/cache: 389868 1678100 Swap: 0 0 0 $ cat /proc/meminfo MemTotal: 2067968 kB MemFree: 564868 kB Buffers: 75548 kB Cached: 1037684 kB SwapCached: 0 kB Active: 1237728 kB Inactive: 189896 kB HighTotal: 1170688 kB HighFree: 1584 kB LowTotal: 897280 kB LowFree: 563284 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 140 kB Writeback: 0 kB AnonPages: 314444 kB Mapped: 42644 kB Slab: 65748 kB SReclaimable: 51412 kB SUnreclaim: 14336 kB PageTables: 2184 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 1033984 kB Committed_AS: 564760 kB VmallocTotal: 114680 kB VmallocUsed: 3548 kB VmallocChunk: 110724 kB
眺めていると、Slabの使用量が増えているのがわかる。まとめてみると、
used | Slab | AnonPages | used-Slab | AnonPages+Slab | |
---|---|---|---|---|---|
起動直後 | 336064 | 18376 | 308016 | 317688 | 326392 |
キャッシュ後 | 389868 | 65748 | 314444 | 324120 | 380192 |
稼働中 | 779736 | 349704 | 419976 | 430032 | 769680 |
usedはAnonPages+Slab+αくらいのようだ。Slabは昨日調べてみたら、カーネルが使うキャッシュのようなものらしい。実際/proc/slabinfoを覗いてみたら、ext3_inode_cacheとdentry_cacheが多く占めていた。
ということで結論:使用メモリの見た目が増えていたのはSlabの仕業だった。Slabはキャッシュなので高速化に貢献しているのだろう。ただ太っているわけじゃないと知って安心した。