トラブルシューティングでよく使うコマンド<Linux・メモリ編>

現在のメモリの使用状況

# 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が使用されている一方で、仮想メモリは使用されていないことがわかります。