2010年7月23日金曜日

誤解の多いswapについて一問一答

◆ メモリに余裕がある状態で、swapが使われることはあるか?
物理メモリに余裕があっても、参照頻度が低い場合はページアウトされ、
その分がbuffersとcachedに利用される。



◆ 本当にメモリが足りないのかどうかを確認するにはどうするか?
freeコマンド"free列"、"buffers/cache"行で表示される値に余裕があるかどうかを確かめる。
またvmstatコマンドでsi(swap in)、so(swap out)していないことを確認する。
ただし、参照が低い領域はページアウト、また逆にswapに落ちていても参照される場合は
ページインされるので、si、soがまった発生しないわけではない。



◆ swapが使われるのははいつ、どのタイミングか?
OSに依存する。



◆ swapが開放されるのはいつ、どのタイミングか?
ページアウトされたページは、そのページを使っているプロセスが存在する限り
廃棄されるということはない。
使っているプロセスが実行する上でページアウトされたページが必要となった場合は、
メモリに戻される。



◆ swap、buffers、cachedの使われ方をチューニングできるか?
/proc/sys/vm/ 配下のチューニングパラメータで設定可能。



◆ メモリに余裕がある状態でswap を使い切ることはあるか?
参照頻度が低い場合はページアウトされるので使い切ることは考えられる。
例えば、メモリリークを起こすようなプロセスがあった場合、
その分がページアウトされ使い切ることがある。
また、使い切った場合はページアウトは発生しない。



◆ swap を手動で開放するオペレーションをとったらどうなるか?
swapoff コマンドを実行してスワップ領域を解放できる。
しかしこのコマンドを実行した時点で物理メモリにページアウトされたページを
元に戻すだけの余裕があればすぐに物理メモリにページが戻る。
しかしながら、物理メモリに余裕がない場合、ページアウトされたページが
戻る場所がないため、そのページに関連したプロセスがダウンするといった問題が発生することもある。