スワップはどれくらいにすべきか
Linuxシステムはスワップ空間がなくても動作し、十分なメモリがあれば問題は起こらない。しかし、物理メモリを使い果たしてしまうと何もできなくなってクラッシュしてしまう。したがって、スワップ空間は用意しておくことが望ましい。なんといっても、ディスク領域はメモリよりも安価だ。
ここで問題になるのが、そのサイズである。以前のUNIX系OS(Sun OSやUltrix)では、物理メモリの2~3倍のスワップ領域が必要だった。最近実装されたもの(Linuxなど)ではそこまでスワップを必要としないが、それくらいのサイズに設定することは可能だ。だいたいの目安は次のようになる。
- 一般的なデスクトップマシンの場合はシステムメモリの2倍にあたるスワップ領域を確保する。これで多数のアプリケーションを実行しても(その多くはアイドル状態にあって容易にスワップ処理が行えるので)アクティブなアプリケーションでより多くのメモリが使えるようになる。
- サーバの場合は利用可能なスワップの容量を少なめに取る(たとえば物理メモリの半分)。これは、いざとなったらスワップを柔軟にコントロールするためで、スワップ使用量を監視して必要であればメモリの増強を行う。
- 旧式のデスクトップマシン(メモリが128MBしかないものなど)では1GBまでの範囲で確保できるだけのスワップ領域を設定する。
Linuxカーネル2.6ではswappinessという新たなカーネルパラメータが追加され、管理者によるLinuxのスワップ処理の調整が可能になっている。このパラメータには0~100の値を設定するが、要は値が大きいほどページのスワップ処理が増え、値が小さいほど多くのメモリ領域がアプリケーションによって(たとえアイドル状態であっても)確保されるということだ。カーネルメンテナのAndrew Morton氏は、swappinessを100にして自らのデスクトップマシンを動作させたうえでこう述べている。「肝心なのは、カーネルによるスワップ処理を減らすのは良くないという点だ。負荷の大きなアプリによって何百メガバイトものメモリが確保されたまま、マシン上で有効に活用されない状態は何としても避けたいと思うだろう。そんな領域はディスク上に追い出し、空いたメモリを有効に使うべきだ」
だが、Morton氏の考え方には、メモリ領域のスワップアウトが早すぎるとアプリケーションの応答が悪くなるというマイナス面もある。これは、(それまで使っていた)アプリケーションの画面をクリックしてもそのアプリケーションのデータが(すでにスワップアウトされて)メモリ内になければ、システムはそのデータを再びメモリに呼び戻さなければならず、その時間分の遅延が生じるからだ。
swappinessのデフォルト値は60だが、rootとして次のコマンドを実行することにより、この設定を一時的に(次回リブートまで)変えることができる。
echo 50 > /proc/sys/vm/swappiness
また、変更を持続させるには「/etc/sysctl.conf」ファイル内のvm.swappinessパラメータを変更する必要がある。
まとめ
スワップ空間の管理は、システム管理において欠かせない部分だ。十分に検討してうまく利用すれば、スワップ処理によって多くのメリットが得られる。とにかく、怖がらずにスワップを設定してシステムのパフォーマンスを計測し、望みどおりの結果が得られるかどうかを確認してみることだ。
Gary Simsは英国の大学でビジネス情報システムの学位を取得。10年に及ぶソフトウェアエンジニアとしての活動を経て、現在はフリーランスのLinuxコンサルタント兼ライター。
