双六工場日誌

平凡な日常を淡々と綴ります。

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

メモここまで。