現在のメモリの使用状況
# cat /proc/meminfo
| 項目 | 説明 |
|---|---|
| MemTotal | 物理メモリ搭載量 |
| MemFree | 空きメモリ容量 |
| Buffers | Bufferのサイズ |
| Cached | PageCacheのサイズ |
| SwapCached | Page outされていたページをPage inして、まだディスクにPage outした時のデータが残っているページのサイズ。空きメモリが足りなくなった場合、Page outせずにそのまま解放できるのでディスクI/Oを省略できます。 |
| Active | 最近アクセスされたページ。基本的に解放の対象外となります。 |
| Inactive | 最近アクセスのないページ。空きメモリが少なくなるとこのページから解放されていきます。 |
| HighTotal | HighMemoryの総容量 |
| HighFree | HighMemoryの空き容量 |
| LowTotal | LowMemoryの総容量 |
| LowFree | LowMemoryの空き容量 |
| SwapTotal | スワップ領域の総容量 |
| SwapFree | スワップ領域の空き容量 |
| Dirty | Dirtyページのサイズ。ディスクへ書き出す必要があります。 |
| Writeback | スワップデバイスに書き出し中のページのサイズ |
| Mapped | |
| Slab | スラブアロケータのメモリ使用量 |
| CommitLimit | プロセスが確保できるメモリの制限値 |
| Committed_AS | プロセスが割り当てているアドレス空間の総量(物理ページの割り当て量ではない)。malloc()だけしてまだアクセスしていない領域(仮想アドレス空間だけ割り当てられて物理ページが割り当てられていない状態)も含まれます。VM的には"commit"されていつでも使用できる状態であることを意味します。 |
| PageTables | PageTableのメモリ使用量 |
| VmallocTotal | vmalloc()により確保するアドレス空間の総容量 |
| VmallocUsed | vmalloc()で割り当て済みの容量 |
| VmallocChunk | vmalloc用領域のFree領域で最も大きい連続領域のサイズ |
プロセスごとのメモリの使用状況
psコマンド
# ps axu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND rails 28804 0.0 3.5 280808 149796 ? S Apr25 0:04 unicorn_rails master -c config/unicorn_production.rb -E production -D rails 28809 0.9 4.3 319832 181968 ? S Apr25 10:38 unicorn_rails worker[0] -c config/unicorn_production.rb -E production -D rails 28810 0.9 4.3 319824 183532 ? S Apr25 10:35 unicorn_rails worker[1] -c config/unicorn_production.rb -E production -D rails 28811 0.9 4.3 321888 182684 ? S Apr25 10:51 unicorn_rails worker[2] -c config/unicorn_production.rb -E production -D rails 28812 0.9 4.3 319828 183528 ? S Apr25 10:45 unicorn_rails worker[3] -c config/unicorn_production.rb -E production -D
psコマンドではVSZとRSSの値に注目します。VSZが仮想メモリサイズ、RSSが物理メモリ(スワップされていないメモリ)サイズを表していて、どちらも単位はKBです。また、この2つの数字にはプロセスの一部 (page tables, kernel stack, struct thread_info, struct task_struct)が含まれていません。これらは最低20KB以上あって、必ずメモリに常駐しているそうです。
topコマンド
# top top - 12:27:20 up 238 days, 12:08, 1 user, load average: 0.68, 0.65, 0.57 Tasks: 82 total, 2 running, 80 sleeping, 0 stopped, 0 zombie Cpu(s): 26.1%us, 6.5%sy, 0.0%ni, 65.7%id, 0.0%wa, 0.0%hi, 0.0%si, 1.7%st Mem: 1789024k total, 1674932k used, 114092k free, 144844k buffers Swap: 0k total, 0k used, 0k free, 382740k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 16757 rails 16 0 151m 132m 4232 S 48 7.6 0:47.21 ruby 12111 rails 15 0 152m 133m 5004 S 12 7.7 10:11.64 ruby 13163 rails 17 0 149m 130m 4356 S 2 7.5 7:00.45 ruby 16772 root 20 0 10616 4716 1156 S 0 0.3 0:00.03 munin-node
topコマンドではVIRTとRESの値に注目します。VIRTが仮想メモリサイズ、RSSが物理メモリ(スワップされていないメモリ)サイズを表していて、どちらも単位はKB(末尾にmと付いているときはMB)です。topコマンドの場合、メモリがサーバー全体でどの程度使用されているかも見ることができます。上記では、物理メモリは1789024KBのうち1674932KBが使用されている一方で、仮想メモリは使用されていないことがわかります。