topコマンドでサーバの動作状況を調べてみました。その結果素人目にはメモリが不足しているように見受けられたのですが実際はどうなんでしょ?
そこで「free」コマンドを使ってもう少し詳しく見てみることにします。
オプションがいくつかありまして
- -k キロバイト単位で表示
- -m メガバイト単位で表示
- -g ギガバイト単位で表示
ということなんですが、キロでは数字が分かり辛いし、かといってギガだと2.5GBしか搭載してない自分のサーバでは0、1、2のいづれかしか表示されないので大雑把すぎてわかりません。
故にここでは「-m」を使用します。では早速叩いてみましょう。すると
total used free shared buffers cached
Mem: 2517 2233 284 0 148 1542
-/+ buffers/cache: 543 1974
Swap: 1903 0 1903
こんな感じで表示されました。数値の説明を調べると
- total 全容量
- used 使用済みの容量
- free 空き容量
- shared 共有メモリとして使用されている容量
- buffers バッファメモリとしての使用量
- cached ファイルキャッシュメモリとしての使用量
を表します。
1行目の「Mem」は実メモリ全体に関する、2行目の「-/+ buffers/cache」は実メモリからキャッシュとバッファを差し引きしたものを、3行目の「Swap」はスワップ領域に関する各容量を表します。
1行目から見てみるとやはり「free」が284メガバイトしか残っていないので、メモリ不足か!?
しかし2行目の「-/+ buffers/cache」について調べてみると・・・
UNIX系OSはディスクの入出力を削減するために各プロセスにバッファとキャッシュを割り当てることで高速化を図っているのだとか。(ちなみにバッファはデータ処理時にデバイス間で異なる処理速度を吸収して効率よく処理を進めるためにデータを一時保管する領域、キャッシュはアクセスされたファイルに関する情報を一時的に保管することでHDDへのアクセスを減らすためのメモリ)
つまりバッファとキャッシュとして使用されている領域を実メモリから差し引きして求められた値のほうが無駄な使用領域や空き領域を的確に測定できるのですって。
それを踏まえてみてみると
「usedからバッファとキャッシュを差し引いた実際の使用量」は543メガバイト
「freeにバッファとキャッシュを足した実際の空き領域」は1974メガバイト
と、実は十分な空き領域を持っていそうなことが判明しました。
じゃあ何がレスポンスの悪化に影響しているんだろ???