特集
» 2007年12月10日 05時20分 公開

Linux Hacks:Linuxのスワップ処理を最適化するためのヒント (4/4)

[Gary-Sims,Open Tech Press]
SourceForge.JP Magazine
前のページへ 1|2|3|4       

スワップはどれくらいにすべきか

 Linuxシステムはスワップ空間がなくても動作し、十分なメモリがあれば問題は起こらない。しかし、物理メモリを使い果たしてしまうと何もできなくなってクラッシュしてしまう。よって、スワップ空間は用意しておくことが望ましい。なんといっても、ディスク領域はメモリよりも安価だ。

 ここで問題になるのが、そのサイズである。以前のUNIX系OS(Sun OSやUltrix)では、物理メモリの2〜3倍のスワップ領域が必要だった。最近実装されたもの(Linuxなど)ではそこまでスワップを必要としないが、それくらいのサイズに設定することは可能だ。だいたいの目安は次のようになる。

  1. 一般的なデスクトップマシンの場合はシステムメモリの2倍に当たるスワップ領域を確保する。これで多数のアプリケーションを実行しても(その多くはアイドル状態にあって容易にスワップ処理が行えるので)アクティブなアプリケーションでより多くのメモリが使えるようになる。
  2. サーバの場合は利用可能なスワップの容量を少なめに取る(例えば物理メモリの半分)。これは、いざとなったらスワップを柔軟にコントロールするためで、スワップ使用量を監視して必要であればメモリの増強を行う。
  3. 旧式のデスクトップマシン(メモリが128Mバイトしかないものなど)では1Gバイトまでの範囲で確保できるだけのスワップ領域を設定する

 Linuxカーネル2.6ではswappinessという新たなカーネルパラメータが追加され、管理者によるLinuxのスワップ処理の調整が可能になっている。このパラメータには0〜100の値を設定するが要するに値が大きいほどページのスワップ処理が増え、値が小さいほど多くのメモリ領域がアプリケーションによって(たとえアイドル状態であっても)確保されるということだ。カーネルメンテナのアンドリュー・モートン氏は、swappinessを100にして自らのデスクトップマシンを動作させた上でこう述べている。「肝心なのは、カーネルによるスワップ処理を減らすのはよくないという点だ。負荷の大きなアプリによって何百Mバイトものメモリが確保されたまま、マシン上で有効に活用されない状態は何としても避けたいと思うだろう。そんな領域はディスク上に追い出し、空いたメモリを有効に使うべきだ」

 だが、モートン氏の考え方には、メモリ領域のスワップアウトが早すぎるとアプリケーションの応答が悪くなるというマイナス面もある。これは、(それまで使っていた)アプリケーションの画面をクリックしてもそのアプリケーションのデータが(すでにスワップアウトされて)メモリ内になければ、システムはそのデータを再びメモリに呼び戻さなければならず、その時間分の遅延が生じるからだ。

 swappinessのデフォルト値は60だが、rootとして次のコマンドを実行することで、この設定を一時的に(次回リブートまで)変えることができる。

echo 50 > /proc/sys/vm/swappiness


 また、変更を持続させるには「/etc/sysctl.conf」ファイル内のvm.swappinessパラメータを変更する必要がある。

まとめ

 スワップ空間の管理は、システム管理において欠かせない部分だ。十分に検討してうまく利用すれば、スワップ処理によって多くのメリットが得られる。とにかく、怖がらずにスワップを設定してシステムのパフォーマンスを計測し、望みどおりの結果が得られるかどうかを確認してみることだ。

Gary Simsは英国の大学でビジネス情報システムの学位を取得。10年におよぶソフトウェアエンジニアとしての活動を経て、現在はフリーランスのLinuxコンサルタント兼ライター。


前のページへ 1|2|3|4       

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ