Linuxのメモリ関連情報取得メモ
遅ればせながら http://d.hatena.ne.jp/hirose31/20120229/1330501968 に触発されて、dstatのことを調べたので、関連してそもそも現在のLinuxのメモリ関連情報をどこまで取れるのかをメモ。
dstatはコードを見ると、/proc/meminfo を直接見にいって、そこから値を取得している。
https://github.com/dagwieers/dstat/blob/master/dstat
class dstat_mem(dstat): def __init__(self): self.name = 'memory usage' self.nick = ('used', 'buff', 'cach', 'free') self.vars = ('MemUsed', 'Buffers', 'Cached', 'MemFree') self.open('/proc/meminfo') def extract(self): for l in self.splitlines(): if len(l) < 2: continue name = l[0].split(':')[0] if name in self.vars + ('MemTotal', ): self.val[name] = long(l[1]) * 1024.0 self.val['MemUsed'] = self.val['MemTotal'] - self.val['MemFree'] - self.val['Buffers'] - self.val['Cached']
読み先の/proc/meminfo は、Kernelバージョンによって内容が異なるが、上記でとっている範囲をCentOS 5と6で確認した限りでは変わらない。
/proc/meminfo等の見方については注意が必要。
- 信頼できるソース
…このあたりの情報を整理したいところですが、なにぶん力不足。。。
とりあえず取れる情報だけリストアップして、続きはまた今度に。
CentOS 6
$ cat /etc/redhat-release CentOS release 6.3 (Final) $ uname -r 2.6.32-220.7.1.el6.x86_64 $ cat /proc/meminfo MemTotal: 2054988 kB MemFree: 527176 kB Buffers: 185912 kB Cached: 924112 kB SwapCached: 852 kB Active: 642396 kB Inactive: 647584 kB Active(anon): 162888 kB Inactive(anon): 29896 kB Active(file): 479508 kB Inactive(file): 617688 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2064376 kB SwapFree: 2059160 kB Dirty: 40 kB Writeback: 0 kB AnonPages: 179196 kB Mapped: 42872 kB Shmem: 12828 kB Slab: 181452 kB SReclaimable: 120972 kB SUnreclaim: 60480 kB KernelStack: 1880 kB PageTables: 18000 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 3091868 kB Committed_AS: 1093804 kB VmallocTotal: 34359738367 kB VmallocUsed: 273860 kB VmallocChunk: 34359452200 kB HardwareCorrupted: 0 kB AnonHugePages: 110592 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 8192 kB DirectMap2M: 2088960 kB
適当に選んだ /proc/PID/smaps の一エントリ。
7f4310fae000-7f4310fb0000 rw-p 00000000 00:00 0 Size: 8 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 0 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 4 kB KernelPageSize: 4 kB MMUPageSize: 4 kB
CentOS 5
$ cat /etc/redhat-release CentOS release 5.7 (Final) $ uname -r 2.6.18-274.el5 $ cat /proc/meminfo MemTotal: 1026124 kB MemFree: 466308 kB Buffers: 148704 kB Cached: 251272 kB SwapCached: 0 kB Active: 365352 kB Inactive: 90840 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 1026124 kB LowFree: 466308 kB SwapTotal: 1052248 kB SwapFree: 1052168 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 56228 kB Mapped: 17908 kB Slab: 82620 kB PageTables: 3660 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 1565308 kB Committed_AS: 179884 kB VmallocTotal: 34359738367 kB VmallocUsed: 264052 kB VmallocChunk: 34359473515 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB
適当に選んだ /proc/PID/smaps の一エントリ。
2ad1068ec000-2ad1068ee000 rw-p 2ad1068ec000 00:00 0 Size: 8 kB Rss: 8 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 8 kB Swap: 0 kB Pss: 8 kB
メモここまで。