1

「ab」ツールを使用して、Apache と PHP のセットアップ (Ubuntu のデフォルト構成) をテストしています。2 つの同時接続では、かなり満足のいく結果が得られます。

ab -k -n 1000 -c 2 http://localserver/page.php

Requests per second:    184.81 [#/sec] (mean)
Time per request:       10.822 [ms] (mean)
Time per request:       5.411 [ms] (mean, across all concurrent requests)

メモリが少ない仮想マシンなので、問題ありません。ここで、より現実的なシナリオをテストしたいと思います。同時に接続された 100 人のユーザー (読み取り: 接続) にリクエストが分散されます。

ab -k -n 1000 -c 100 http://localserver/page.php

Requests per second:    60.22 [#/sec] (mean)
Time per request:       1660.678 [ms] (mean)
Time per request:       16.607 [ms] (mean, across all concurrent requests)

これははるかに悪いです。全体の 1 秒あたりのリクエスト数は大幅に減少していませんが (184 から 60 #/秒)、ユーザーの観点から見たリクエストあたりの時間は急激に増加しています (平均で 10 ミリ秒から 1.6 秒以上)。最長のリクエストは 8 秒以上かかり、Web ブラウザーを使用してローカル サーバーに手動で接続すると、テスト中に約 10 秒かかりました。

何が原因で、同時実行パフォーマンスを許容レベルに最適化するにはどうすればよいですか?

(Ubuntu Linux Server に同梱されているデフォルトの構成を使用しています。)

4

1 に答える 1

3

まず、各スクリプトが消費するメモリの量を調べる必要があります。memory_limit を作成し、VM のメモリをこれで割ります。これは、メモリが不足することなく同時に処理できる接続の数であり、サーバーがスラッシングを開始する必要があります。

接続数が非常に少なくなります。だからあなたはする必要があります

  • メモリを増やす
  • memory_limit を減らす
  • 各接続をより速く終了させる

次のステップは、データベース クエリに予想よりも時間がかかるかどうかを確認することです。私は通常、0.5 秒を超えるクエリで mysql-slow.log を調べ始めます。また、可能であれば、インデックスを使用しないクエリを削除します。

次に、collectd などの監視ツールをインストールして、使用可能な CPU が十分にあるかどうかを確認します。

ビジネスの観点からは、これが新しい Web サイト/システムであるか、既存のものであるかによって異なります。それが新しく、成長が劇的な場合、しばらくの間ハードウェアに過剰に費やす必要があります。システムが機能しないか、トラフィックの下でクラッシュすると、ビジネスへの信頼が急速に損なわれます。それに加えて、ホスティングの請求額が月額 1000 ドル未満の場合、多くを最適化する価値は通常ありません。それが手頃な価格でない場合は、ビジネス モデルに戻る必要があるかもしれません。

于 2013-10-31T19:22:47.597 に答える