9


12

Djangoの配備:Apacheのオーバーヘッドを減らす

私は静的メディアファイルを提供し、mod_wsgiを実行しているApache 2.2 prefork MPMサーバーにDjangoリクエストを渡すNginxフロントエンドを持つ小さなVPSサーバーを持っています。

1つの(非常に)小さなサイトがロードされて機能している場合、現在256MBのRAMのうち143MBを使用しています。

`top`コマンドを使うと、Apacheは利用可能なRAMの52.9%を使用していますが、memcacheは2.1%を使用しています。

この1台のサーバーに多数のDjangoプロジェクトを配置することを計画していることを考えると、Apacheが使用しているRAMの量を減らすためにできることがあるかどうか疑問に思いますか?

4 Answer


8


もしあなたがApacheを使い続けたいのなら、いくつかの提案がありますが、おおまかに言って難易度の高いものです。

  • preforkの代わりにApache worker MPMを使用してください。 クライアント接続ごとに使用される実メモリは少なくなりますが、Linux上のApacheに割り当てられる仮想メモリは、各スレッドのスタックに8MBのLinuxが割り当てられるため、非常に高く見えることがあります。 あなたのVPSが頭がいっぱいで、実際のRSS(常駐セットサイズ)メモリではなく仮想メモリを制限しない限り、これは実際問題ではありません。 その場合は、スレッドのスタックサイズを小さくする方法を学ぶことができます。 ここ(メモリ制約のあるVPSセクションの下)。

  • Apacheの設定ファイルを編集して、StartServers、MaxClients、MinSpareThreads、およびMaxSpareThreadsの設定をほぼ比例して減らします。 適切なレベルは、希望するメモリ使用量と、サービスを提供できるようにするために必要な同時クライアント数とのバランスになります。

  • mod_pythonではなく mod_wsgi(デーモンモード)に切り替えてください。


6


記録として、OPのMPMという用語の使用は意味がありません。 ApacheのMPMはオプションではありません。Apacheを使うときは常にMPMを使っています。 選択はあなたが使用しているMPMです。 UNIXでは、2つの主要なMPMまたはマルチプロセッシングモジュールはpreforkとworkerです。 Windowsではwinnt MPMが常に使われています。 さまざまなMPMについての詳細は、Apache WebサイトのApacheの資料に記載されています。 しかしmod_wsgiの文脈では、読むことをお勧めします。

一言で言えば:

  • prefork MPMはマルチプロセス/シングルスレッドです。

  • ワーカーMPMはマルチプロセス/マルチスレッドです。

  • シングルプロセス/マルチスレッドでMPMを獲得。


3


デプロイには Spawnを使用することを検討してください。


2


FastCGI上でDjangoを実行することができます。 nginxはApacheを経由せずに直接ドライブすることができます。