メイン・メモリーが不足すると,CPUの処理性能やI/Oデバイスの帯域幅に悪い影響を与え,サーバー全体のパフォーマンスを劣化させてしまう。本来必要な量のメモリーを搭載していない場合には,頻繁にスワッピングが発生することになる。

 スワップ領域はハード・ディスク装置上に配置されているため,メモリーと比べて圧倒的にアクセス・スピードが遅くなり,スワップ領域を使い始めるとパフォーマンスが大幅にダウンする。こうしたパフォーマンス低下が起きないよう,使用するOSやアプリケーションにマッチした,適切なメモリー容量を見極める必要がある。

 図1はスワップ回数と性能の関係を表した概念図である。ある一定レベルまでは,メモリー容量の増加に比例してパフォーマンスが向上していく。そして,その一定レベル(スワップが安定した状態)を超えると,メモリー容量を増やしてもパフォーマンスが向上しにくくなる。そのポイントを見極めることによって,搭載するべきメモリー容量を把握できる。

図1●スワップ回数と性能の関係
図1●スワップ回数と性能の関係

メモリーの負荷状況を調べる

 メモリーの負荷状況を調べるには,以下のようにすればよい。

(1)/proc/meminfo

 メモリーとスワップに関する詳細情報を参照できるファイルである(図2)。後述するvmstatやfreeなどのコマンドはこのファイルから情報を取得して表示している。

       total:    used:    free:  shared: buffers: cached:
Mem: 524533760 521080832  3452928 1662976 16957440 400457728
Swap: 1073717248       0 1073717248
MemTotal:      512240 kB
MemFree:         3372 kB
MemShared:       1624 kB
Buffers:        16560 kB
Cached:        391072 kB
SwapCached:         0 kB
Active:         56888 kB
Inact_dirty:   201860 kB
Inact_clean:   150508 kB
Inact_target:  131064 kB
HighTotal:          0 kB
HighFree:           0 kB
LowTotal:      512240 kB
LowFree:         3372 kB
SwapTotal:    1048552 kB
SwapFree:     1048552 kB
BigPagesFree:       0 kB
図2●/proc/meminfoファイルの内容

(2)vmstat

 仮想メモリーの統計情報を取得するためのコマンド。メモリーとスワップの状況は次に示した個所を見るとよい。

●memory

swpd:使用している仮想メモリーの総量(Kバイト)

free:空きメモリーの総量(Kバイト)

buff:バッファとして使用しているメモリーの総量(Kバイト)

cache:キャッシュとして使用しているメモリーの総量(Kバイト)

●swap

si:ディスクからスワップインされているメモリーの総量(Kバイト/秒)

so:ディスクにスワップアウトしているメモリーの総量(Kバイト/秒)

 ここで表示されるbuffとcacheは,それぞれバッファ・キャッシュとページ・キャッシュのことを指している。共にファイル・アクセスを高速化するために使用される。なお,バッファ・キャッシュはブロック・デバイスのキャッシュであり,デバイスとブロック番号を用いてブロック単位でデータを扱う。一方,ページ・キャッシュはファイルのキャッシュであり,iノード番号とファイル・オフセットを用いてページ単位でデータを扱う。

(3)free

 vmstatと同様に,メモリーの使用状況を表示するコマンドである(図3)。前述の通り,/proc/meminfoファイルの情報を見やすく整形して表示したものである。

# free -mt
             total  used  free  shared  buffers  cached
Mem:           500    95   404       0        2      15
-/+ buffers/cache:    76   423
Swap:         1023    64   959
Total:        1524   159  1364
図3●freeの実行結果
mはMバイト単位で表示するオプション。tは物理メモリーとスワップの合計を示す行も表示するためのオプション。