こんにちは。私は PHP (Magento) スクリプトを備えた Apache サーバー 2.2 を持っています。
通常、PHP ページは 1 ~ 2 秒でレンダリングされますが、これは問題ありません。
トラフィック量が多い場合やスパイダー ボットが粗雑な場合は、すべての Apache スロットがブロックされることがあります。
単一のリクエストは非常に遅く実行され、mysql が oom-killer を呼び出して、必要な tomcat を強制終了するまで、メモリをどんどん消費します。
まず、mod_evasive を試しました。しかし、設定が厳しすぎると、すばやくブラウズできなくなり、設定が緩すぎると、リクエストが処理されるよりも早く届く可能性があります。
問題は PHP ファイルです。画像などの他のリソースはスロットを妨害しません。
次に、MaxClients を下げて制限しようとしました。しかし、今では 1 つのクライアントがすべてのスロットを妨害する可能性があります。
クライアントあたりの最大接続数を制限する方法、または IP あたりの同時 PHP スクリプトの最大数を制限する方法を教えてください。
他の Apache クライアントは、どのクライアントも優遇することなく、処理できる以上のリクエストを回避するためにどのように構成されていますか?
答え1
サイトをオリジンプルCDNの背後に配置する(クラウドフレア一つの選択肢として思い浮かびますが、他にも選択肢はあります。
通常、PHP ページは 1 ~ 2 秒でレンダリングされますが、これは問題ありません。
いいえ、ちがいます。
コードを最適化して、二ページの生成には数秒かかります。
キャッシュ全て物事。
- ページリクエストをキャッシュするワニス
- Memcached を使用してデータベース検索をキャッシュします。
- CDN に画像をキャッシュします。
- APC または eAccelerator (または同様のオペコード キャッシュ) を使用して PHP レベルをキャッシュする
- さらに、CDN 上のページ全体をキャッシュすることもできます。
まだ行っていない場合は、データベース サーバーを別のサーバーに分離し、大量のメモリと超高速ディスクを用意して、テーブルを徹底的にキャッシュします。Magento は結合などに関しては非常に高速なので、データベース サーバーを非常に高速にする必要があります。
ユーザーがサイトを閲覧すると、コンテンツがキャッシュから取り出されます。どこか生成する必要がない毎時間。
私はあなたのサイトに対して Yslow を実行してみました。結果の概要は次のとおりです (ただし、これは自分で行う必要があります)。
- HTTP リクエストを減らします。 基本的には、JavaScript ファイルと CSS ファイルを 1 つに結合して、複数のリクエストを実行するオーバーヘッドを削減する必要があります。
- コンテンツ配信ネットワーク (CDN) を使用します。 すでに^^上でも言いましたが、Yslowによると、60CDN 上にない静的コンポーネント。このうち 1.4 MB は www.brainyoo.de から取得されています。それでは、次のことに注意しましょう。
- アセットを複数の Cookie フリー ドメインに移動します。60 個のアセットが、サイトの残りの部分と同じドメインから読み込まれています。つまり、ブラウザは、次のアセットを読み込む前に、各アセットが読み込まれるのを待つ必要があります。この問題を回避する一般的な方法は、静的アセットを別の Cookie のないドメインに配置することです (これにより、リクエストが小さくなり、高速になり、Cookie 情報が含まれなくなります)。
- Javascript をドキュメントの下部に移動します。 スケーラブルで高速な Web サイトのためのベスト プラクティスと見なされます。
- Javascript と CSS を縮小します。 本当に。1 メガバイト近くの JS と CSS を送信していますが、これは縮小して...
- コンポーネントを Gzip で圧縮します。gzip 圧縮できるプレーンテキスト コンポーネントは 39 個あります。
- Expires ヘッダーを追加します。 有効期限が遠い静的ファイルが 63 個あるため、ブラウザによって効果的にキャッシュされていません。
YSlow の総合評価は D です。問題は完全にサーバー側にあるのではなく、かなり手直しして YSlow 評価を上げることで改善できるのではないかと思います。そうすれば、a) Apache サーバーから提供されるトラフィックが少なくなります。b) 読み込みが速くなるため、訪問者が Apache プロセスを長時間ロックすることがなくなります。
答え2
一般的に、Magento の動作が遅かったり、サーバーが頻繁に停止したりする場合は、RAM や CPU パワーを増やすとサーバーの動作が改善されます。サーバーを調整して Magento をスムーズに実行できますが、それには a) ある程度の時間と b) 必要な (サーバー側の) リソースが必要です。
どの程度 DB チューニングを行いましたか? Magento は面倒ですが、十分な RAM があれば高速になるように構成できます。
次のようなツールを使用するmysql_チューナーまたはMySQL チューニング入門DB を調整します。
できる限り多くのキャッシュを使用してください。APC がサポートされているかどうかは覚えていませんが、memcache の方が適しています。
また、さまざまな理由により HD パフォーマンスが非常に低下していることを示すヒントである IOWAIT にも注意する必要があります。
編集:
他の Apache クライアントは、どのクライアントも優遇することなく、処理できる以上のリクエストを回避するためにどのように設定されていますか? / 処理できる以上のリクエストを受け取った場合に、他の Apache がどのように状況を処理するかを知りたいです。
通常、予想されるトラフィックに応じてセットアップをスケールします。スパイダーやクローラーがアクセスしているときにサーバーがダウンする場合は、パフォーマンスが非常に悪いスクリプトがあるか、サーバーが小さすぎます。
サーバーに 1000 人のユーザーがいると予想される場合は、5000 のクライアントを処理できるサーバーを使用します (max_clients に達したかどうか error.log を監視します)
レート制限は可能ですが、mod_evasive の場合と同じ結果になります。DDOS などの観点では非常に役立ちますが、設定を調整する必要がある場合には役立ちません。