今回、メインメモリが今までの半分、価格は約2/5というVPSを契約しました。
というわけで、早速、前回書いた、mod_python + django という組み合わせのアプリを移行してみたのですが、、、結構メモリを食ってしまって、もっさり感が満載の残念な感じになってしまいました。
というわけで、新しく ajp + djangoという組み合わせで動かすことにしました。
といいましても、インストールはpythonにflupというモジュールを足すだけです。
あとは、
manage.py runfcgi protocol=ajp host=localhost port=8009
と書けば起動します。
正直、mod_pythonを仕込むよりぜんぜん楽です。
そのかわり、起動用のスクリプトを書かないといけませんけどね。
あっけない感じですが、pythonインタープリタがapacheから分離するので、apacheのメモリ使用量がぐっと抑えられます。
せっかくなので、mod_rewriteとか必要そうなもの以外は全部、モジュールもはずしちゃいます。起動プロセスに関するパラメータもいじります。そのほか、触れそうなものはDefaultStackSizeまで調整します。
そうするとApacheのプロセスはかなり軽くなります。
あとはpythonプロセスがネックではありますが、あまり呼ばれないように静的コンテンツを増やして同時処理数を絞るのが良いかもしれません。
mysqlもせっかくなのでチューニングしたいところですが、また今度。
ちなみに僕がこれをやったところ、起動時のメモリ使用量は500MBから300MB程度になりました。
それにレスポンスがかなり良いです。感覚ですけど。
やっぱり、プロセスは役割を分けたほうがチューニングがしやすいですし、動作も軽快になりますね。
結局、Apache + APサーバというJava時代の構成となんら変わらないという先祖がえりというおちでありました。
かなり主観が入ったレポートで、mod_pythonのほうはチューニングをまったくしてません。
もしかしたら、うまいやり方があるかもしれません。ごめんなさい。
ちなみに、起動パラメータのprotocolは、{fcgi, scgi, ajp}と3通り選べます。
大差なさそうなので、試してないです。