質問

Apacheの負荷を軽減するために、人々はしばしばlighttpdを使用して静的コンテンツを提供することを提案します。

e.g。 http://www.linux.com/feature/51673

この設定では、Apacheは静的コンテンツのリクエストをmod_proxy経由でlighttpdに渡し、動的リクエスト自体を処理します。

私の質問は、これによりどのようにサーバーの負荷が軽減されるのですか?着信するリクエストごとにApacheプロセスがまだ生成されているので、これは負荷にどのようにプラスの影響を与えますか? lighttpdを介してリクエストをプロキシするApacheプロセスのサイズは、ファイル自体を提供している場合と同じくらい大きいことがわかります。

役に立ちましたか?

解決

Lighttpdを実行して behind Apacheを使用して静的ファイルを提供することは、確かに私にとって頭が痛いようです。 Apacheは、HTTPパケットをアンパックし、解析ツリーを介してリクエストを解析し、プロキシリクエストを送信し、その後、Lighttpdが再解凍し、ファイルシステムをヒットし、Apacheを介してファイルを返送する必要があります。実稼働環境でこのようなセットアップを使用している人はいません。

表示されるのは、 Nginx などの軽量Webサーバーをフロントエンドとして使用している人ですApacheに静的ファイルとプロキシ動的URLを提供するサーバー。または、ワニスまたは Squid をキャッシュリバースプロキシフロントエンドとして使用して、トラフィックの多い静的ファイル(画像、CSSなど。すべての動的ページ キャッシュフレンドリーヘッダーの送信を希望する)はメモリ不足になります。

Apacheは、静的ファイルを提供するように最適化することもできます。そのため、Apacheについて不満を言う人がいるとよく耳にしますが、Apacheを設定する方法はわかりません。彼らはこれまでにprefork MPM(vs. threadedまたはworker)のみを使用し、あらゆる種類のモジュールを有効にしました(通常、すべてをモジュールとしてビルドし、デフォルトで10-20を有効にするLinuxディストリビューションのキッチンシンクApacheパッケージから実行しています)モジュール以上)。 .htaccess(Apacheがすべてのリクエストでファイルシステムをスキャンするように!)のサポートのような不要なモジュール/愚かな機能をオフにしてApacheを調整します。 (Apacheの2つのインスタンスを実行することもできます。動的リクエストの「重い」Apacheにプロキシするフロントエンドとして「ライト」Apacheを使用できます。 -mod_phpなどの安全でない外部モジュール。)

再:

  

まだApacheプロセスがあるので   来るリクエストごとに生成されます   で、これはどのように良い影響を与えますか   積み荷?サイズがわかるものから   プロキシするApacheプロセスの   lighttpdを介したリクエストは大きい   それが提供していた場合のように   ファイル自体。

すべてのリクエストでプロセスを生成する場合、それはprefork MPMを使用していることを意味します。メモリがすべて配線されているわけではなく、OSがこれらの各プロセスのメモリ使用量を報告すると、それらのプロセスの多くがアイドル状態になることに注意してください。また、速度について話すときは、OSによって報告されるメモリ使用量よりも、特定のリクエストのリクエスト解析と内部コードブランチ(サーバーの処理量)に関心があります。

たとえば、mod_phpのようなものを有効にすると、それらの各ワーカープロセスは約20〜40M(PHPインタープリターで有効になっているものに応じて)すぐに上がりますが、Apacheが使用しているわけではありません静的リクエストのメモリ。もちろん、小さな静的ファイルで最大の同時実行性のためにサーバーを最適化する場合、mod_phpを有効にすることは依然として非常に悪いことであり、ほぼ同じ数のプリフォークプロセスをRAMに適合させることはできません。

「悪夢のような構成」を思いつくかもしれません。 Apacheの場合、静的ファイルの提供をバックエンドのLighttpdにプロキシするよりも実際には遅くなりますが、Lighttpdで無効になっているApacheで.htaccessのような高価な機能を有効にする必要があるため、本当に公平に。

他のヒント

  1. 同じマシンからの静的および動的コンテンツを提供する力がある場合(参照された記事を実行します)、その設定には本当に意味がありません。
  2. ディスクへのIOを行う必要がないため、Apacheの負荷を減らすことはできますが、同じマシンでLighttpdの負荷を増やし、 > Apacheに使用可能な負荷 ...
  3. Lighttpd IOアクセスは、Apache 1.3よりも軽いかもしれませんが、Apache 2またはLighttpdに完全に切り替えてみませんか?そして、パフォーマンスが本当に低下し始めたら、静的ファイルを別のマシン(media.yourdomain.com)でホストします。

パフォーマンスのセットアップを行う方法の簡単な紹介は次のとおりです。 Djangoのデプロイ->終了する前のページに Scaling スクロールします

Apacheの内部動作についてはあまり知りませんが、私が見た説明の1つはメモリのプレッシャーについてです。つまり、Apacheはキャッシュと動的ページに使用するメモリのバランスをとろうとします。ただし、通常はキャッシュが多すぎてアプリには少なすぎます。それらを異なるプロセスに分離すると、それぞれが負荷の種類に合わせて最適化されます。

現在、私がしていることはフロントエンドとして nginx を使用しています。本当に高速で軽量で、特にフロントエンドプロキシとして設計されています。静的ファイルも提供します。実際、FastCGIプロセスを呼び出すこともできるため、Apacheを削除しても、ファイル/アプリプロセスの分割のメリットを享受できます。 (さらに memcachedマジックそれは絶対に天才に見える)

(はい、lighttpdはApacheやFastCGIのフロントエンドとしても使用できます)

リクエストごとに生成されるApacheプロセスはありません-静的ファイル(イメージなど)はlighttpdによって直接フェッチされます。

Apache MPM Worker fastcgiを使用すると、サーバーのメモリ使用量が削減されます。 MPMワーカーは、Preforkよりも静的コンテンツの方が優れており、静的コンテンツに関してはlighttpdとほぼ同等です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top