web-dev-qa-db-ja.com

サーバーは3000の同時クライアントでクラッシュします-それを正しく構成する方法は? PHP&Apache

4つのWebサーバー、2つのデータベースサーバー(読み取りと書き込み)、Redis、およびロードバランサーがあります。 PHP 7.0&Apache2&MySQL 5.7を使用していますが、同時にサーフィンをする3000人のユーザーで負荷テストを行うと、サーバーが1つずつクラッシュします。

Apacheサーバーは強力で、それぞれに32GBのRAMが搭載されており、残念ながらすべてのサーバーがRAMの最大使用量に達しています。

私たちはコードに多くの変更を加えました、しかしそれは私には正しく感じられません、私のホスティングプロバイダーはこれが彼らができる最善であると彼らが言うので私のサーバーをさらに構成するのを手伝うことができません、そしてここで私はあなたが必要ですヘルプ-何が欠けていますか? PHP/Apache/MySQLのどの構成を設定する必要がありますか?

このサイトは、たとえば300のクライアントに対して適切に機能することを明確にしますが、アクセスするクライアントが増えるにつれて、応答時間は要求ごとに50秒に達します。これは本当に奇妙なことです。

私は本当に絶望して混乱しています、私たちは何を見るべきですか?

どうもありがとう。

2
MyLibary

去年の夏は6000人もいました。ロードバランサーを備えた4台のサーバーがそのような要求を処理しないのはどうしてですか?

では、何が変わったのでしょうか?質問に答えるために、ほとんどの場合、バックエンドのコード処理で行き詰まり、時にはtcpソケットの枯渇などによって、そして他の場合には、Apacheとphpの間の単純なプールなどの制限です。

このプロセスに従ってください:

  1. スタックからPHPを削除します。テスト用に小さな静的ファイルのみを提供します
  2. 結果を観察し、Apache/OSを調整して目的の接続に対応します
  3. PHPを再導入します。サーバーは静的ファイル提供のパフォーマンスに匹敵することができなくなります
  4. PHPコードをプロファイリングし、速度低下を特定して解決します
  5. 最後に:可能な限りPHPの結果をキャッシュします。

非記述phpアプリケーションを取得するにはどうすればよいですかxベンチマーク?は非常に幅広い質問ですが、プロセスは一般的に、フロントエンドの静的サービングを要件に適合させてから、バックエンドコードをミックスに追加します。バックエンドコードのixの速度低下、またはそれを排除します。

数千人のユーザーにヒットし始めたら同時ユーザー..特定の制限(ファイルシステム速度、メモリ、CPU速度、通信遅延、非効率wordpress)に対してブラッシュアップします。コードと遅いデータベース呼び出し、およびCPUでの大量のコンテキスト切り替え)が複雑になり、すぐにサービスが急激に低下します。

2
Daniel Widrick