web-dev-qa-db-ja.com

静的コンテンツを提供するためにApacheの速度を最適化するには?

静的コンテンツにはngixの方がはるかに優れていることは承知していますが、使用できません。それ以外の場合は、サーバー(VPS)へのフルアクセス権があります。

Apacheの最適化に関する記事や投稿を数多く見つけましたが、それは常にPHPアプリのパフォーマンスに関するものです。

最新のApache 2.4.7を使用しています

すでにMPMを使用しています。 (静的コンテンツ)パフォーマンスのためにKeepAliveMaxClientsなどを調整することを考えていましたが、それが理にかなっていますか?

6
Badr Hari

Apacheを調整する前に、適切な監視が行われていることを確認してください。Apacheが処理する要求の数と、システムリソースが相互にどのように相関しているかを確認できます。このための使いやすいソリューションは munin です。

次に、システムに負荷をかけて負荷テストを準備し、さまざまなチューニングオプションがどのような影響を与えるかを確認します。非常に単純な ab 以上 JMeter から、世界中の何千もの訪問者をシミュレートできる非常に洗練されたクラウドベースのソリューションに至るまで、これにはかなりのソリューションがあります。 「ウェブサイト負荷テスト」を検索すると、多くのソリューションが見つかります。

最後に、Apacheをチューニングする際に重要と考える点を以下に示します。

  • 未使用のモジュールを削除する:Apache2ctl -Mを使用して、ロードされているモジュールを確認します。 (shared)とマークされているモジュールは、不要な場合は削除する必要があります。これにより、Apacheのメモリフットプリントが削減され、OSは利用可能なRAMを他の目的(キャッシュなど)に使用できます。

  • .htaccessファイルを使用しない:すべての設定をApache構成に入れてAllowOverride Noneを設定します。これにより、Apacheが.htaccessファイルを探してリクエストを処理しているときにそれらを解析する必要がなくなります。

  • シンボリックリンクを明示的に許可:Options +FollowSymLinks -SymLinksIfOwnerMatchを設定することで、シンボリックリンクが許可されることをApacheに通知し、シンボリックリンクであるかどうかを確認することなく、読み込むファイルを自由に提供できます。これにより、一部のシステムコールが節約されます。

  • モニタリングのニーズに応じて、ExtendedStatusをオフにすることを検討してください。これにより、一部のシステムコールが節約されますが、モニタリング情報が少なくなります。それが本当に価値があるかどうかわからない。

  • 過度のロギングを回避する:すべての要求をロギングすると、かなりの入出力が発生する可能性があります。選択的ロギングを使用すると、ログに記録する要求を制御できます。以下は、.htmlで終わるURLへのリクエストのみをログに記録します。

    SetEnvIf Request_URI ".html$" dolog
    CustomLog /var/log/Apache2/access.log combined env=dolog
    
  • SSLが不要な場合は、イベントMPMの使用を検討してください。これにより、開いている接続(キープアライブなど)がより効率的に処理されます。 SSLが必要な場合、イベントMPMはワーカーMPMと同じように機能します。さまざまなMPMモジュールの詳細については、 使用するApache MPMを選択するにはどうすればよいですか? を参照してください。

  • データの圧縮または事前圧縮:mod_deflateを使用することにより、コンテンツはクライアントに送信される前に圧縮されます。静的データがあるので、同じデータを何度も圧縮するのではなく、コンテンツを事前圧縮する価値があるかもしれません。これを実行する方法については、 http://httpd.Apache.org/docs/2.4/mod/mod_deflate.html#precompressed を参照してください。

  • OSの調整:大きなTCP書き込みバッファーを使用して、要求されたデータをクライアントに送信するために必要なシステムコールを減らします。また、Apacheが実行しないように、オープンファイルの最大数が十分に多いことを確認してください。その限界にぶつかる。

7
Oliver

KeepAliveは通常、多くの意味があり、より多くのメモリを必要としますが、接続数、CPU使用率、および接続オーバーヘッドを低減します。代わりに、MaxClientsおよびその他のものを状況に合わせて調整する必要があります。通常、Apacheには、常に新しい子プロセスを生成することなく、すべてのユーザーにサービスを提供するのに十分な数のアイドルインスタンスが必要です。同時に、メモリ使用量を制御するために、maxclientsに過度の値を与えないようにします。ただし、急激な使用量の急増がない限り、デフォルトのApache設定は通常は適切であり、環境に十分に適応します。

Httpsを介してコンテンツを提供する場合、phpを使用していないため、mod_spdyモジュールも試してみることをお勧めします。多くのブラウザーは既にそれをサポートしています(http 2.0のグローバルサポートを待っています)。

最後に、別のオプションは、キャッシング/プレキャッシングを使用することです。その点で、いくつかのモジュールのおかげで一部の機能はApacheですでに利用可能です( http://httpd.Apache.org/docs/2.4/caching.html を参照してください)、または他の何かを置くことができますサーバーの前面(ワニスが人気のあるオプションです)。

2
stoned