proc/meminfo
cat /proc/meminfoとすることで、現在のメモリの使用状況を確認できる。
(*1)
(*2)
(*3)
(*4)
[参考]
Documentation/filesystems/proc.txt
表示例
MemTotal: 1001008 kB
MemFree: 200708 kB
Buffers: 43400 kB
Cached: 395740 kB
SwapCached: 0 kB
Active: 557556 kB
Inactive: 178624 kB
HighTotal: 97216 kB
HighFree: 140 kB
LowTotal: 903792 kB
LowFree: 200568 kB
SwapTotal: 2096472 kB
SwapFree: 2096472 kB
Dirty: 224 kB
Writeback: 0 kB
Mapped: 356492 kB
Slab: 47820 kB
CommitLimit: 2596976 kB
Committed_AS: 689048 kB
PageTables: 6192 kB
VmallocTotal: 114680 kB
VmallocUsed: 4560 kB
VmallocChunk: 107264 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
表1 meminfoの表示項目
項目 | 説明 |
---|---|
MemTotal | メモリ搭載量 |
MemFree | 空きメモリ量 |
Buffers | Bufferのサイズ。(*1) |
Cached | PageCacheのサイズ(*2) |
SwapCached | PageoutされていたページをPageinして、まだディスクにPageoutした時のデータが残っているページの容量。空きメモリが足りなくなった場合は、Pageoutせずにそのまま解放できるのでI/Oを省略できる。 |
Active | 最近アクセスされたページ。基本的に解放の対象外。(*3) |
Inactive | 最近アクセスのないページ。空きメモリが少なくなるとこのページから解放されていく。 |
HighTotal | HighMemoryの総容量 |
HighFree | HighMemoryの空き容量 |
LowTotal | LowMemoryの総容量 |
LowFree | LowMemoryの空き容量 |
SwapTotal | スワップ領域の総容量 |
SwapFree | スワップ領域の空き容量 |
Dirty | Dirtyページのサイズ。ディスクへ書き出す必要がある。 |
Writeback | スワップデバイスに書き出し中のページの容量 |
Mapped | PageTableからマップされているページの容量? |
Slab | スラブアロケータのメモリ使用量 |
CommitLimit | プロセスが確保できるメモリの制限値(*4) |
Committed_AS | プロセスが割り当てているアドレス空間の総量(物理ページの割り当て量ではない)。malloc()だけしてまだアクセスしていない領域(仮想アドレス空間だけ割り当てられて物理ページが割り当てられていない状態)も含まれる。(VM的に'commit'されいつでも使用できる状態) |
PageTables | PageTableのメモリ使用量 |
VmallocTotal | vmalloc()により確保するアドレス空間の総容量 |
VmallocUsed | vmalloc()で割り当て済みの容量 |
VmallocChunk | vmalloc用領域のFree領域で最も大きい連続領域のサイズ |
(*1)
各デバイスのbdev->bd_inode->i_mapping->nrpagesの総和から計算している。
BufferはPageCacheとして実装されており、PageCache割り当て時にbdev->bd_inode->i_mappingを指定している。
BufferはPageCacheとして実装されており、PageCache割り当て時にbdev->bd_inode->i_mappingを指定している。
(*2)
get_page_cache_size()-total_swapcache_pages-i.bufferram
スワップキャッシュ、BufferはPageCacheとして実装されているのでその分を引いてある。
スワップキャッシュ、BufferはPageCacheとして実装されているのでその分を引いてある。
get_page_cache_size()はグローバル変数nr_pagecacheを返している。nr_pagecacheはadd_to_page_cache()でページキャッシュをRadixTreeに登録する時にインクリメントされる。
(*3)
Active,InactiveリストはZone毎に持つ。これらのリストにはPageCacheやユーザプロセスのページがつながれる。
(*4)
('vm.overcommit_ratio' * Physical RAM) + Swap で計算される。
vm.overcommit_memoryが2の時、本値をこえてアドレス空間をcommit(allocate)出来なくなる。デフォルトのモード0だと本値での厳密なチェックは行なわないが、無茶な割り当てはできないようチェックは行なっている。
詳細はDocumentation/vm/overcommit-accounting参照
vm.overcommit_memoryが2の時、本値をこえてアドレス空間をcommit(allocate)出来なくなる。デフォルトのモード0だと本値での厳密なチェックは行なわないが、無茶な割り当てはできないようチェックは行なっている。
詳細はDocumentation/vm/overcommit-accounting参照
[参考]
Documentation/filesystems/proc.txt