Virtuozzo系VPSにおけるメモリの節約方法

大分ノウハウがたまってきたので、メモっておく。

総論

  • VSZとRSSの違いを理解すべし。privvmpagesで制限されるのは、VSZの方。ps auxでプロセスごとのメモリ使用量を確認し、VSZの大きなものについては、廃止や代替アプリの導入を検討すべし。
  • マルチスレッドアプリケーションは、スレッドごとにスタック領域を持つため、VSZが増大する。できるだけ同時起動スレッド数を減らし、かつulimit -sでスタック量を削減すること。可能なら、シングルスレッドの代替アプリケーションの導入を検討すべし。ちなみにforkは意外にメモリを消費しない。多分copy on writeしているから。
  • 定期的にprivvmpagesを監視すべし。flash crowdを考慮し、常に最大値の6割程度で運用すべし。cron等で定期的に実行されるプロセスを考慮するのを忘れるべからず。

各論

  • Apacheのmpmはマルチスレッドのworkerでなく、preforkを選択。可能なら、Apacheをlighttpdやlitespeed等のイベント駆動型サーバに置換すべし。
  • MySQLはInnoDBをOFFにすれば、初期使用メモリを100MB程度減らせる。さらに各種キャッシュ量を調節することで、初期VSZを20MB程度まで削減可能。
  • PHPはモジュールよりもWebサーバプロセスと切り離してfcgiで運用する方が、トラフィックに応じてプロセス数をより細かく調節できるのでよい。また、拡張モジュールは必要最小限のものだけロードすべし。
  • OpenSSHはdropbearに変更することで、少しだけメモリを節約できる。
  • bindはdjbdnsやmaradnsに変更することで、かなりのメモリを節約できる。コンテンツサーバに限定するなら、nsdもあり。
  • Javaは大量にメモリを消費するため、使用をあきらめた方がいい。どうしても使用する必要がある場合は、起動時オプションでヒープ量をぎりぎりまで抑えること。


| | 2007-07-25 07:22

Commenting is closed for this article.