Apache Benchmarkはパブリックネットワークからは低速で、ローカルでは高速です。これを高速化するために私がすることは何ですか?


3

私は自分のLinode Ubuntu 14 64ビットサーバーをテストしています。これは、それらから入手できる最も基本的なサーバーです。Apache Benchmarkを使用してサーバーをテストしているほか、Pythonで記述したマルチスレッドスクリプトを使用していますが、これについては後で詳しく説明します。ABを使用すると、サーバー自体からローカルに実行すると1秒あたり約7kの要求がありますが、別のネットワーク/インターネットから実行すると約15になります。応答時間は、ローカルでの1000の同時接続の場合、約150ミリ秒です。リモートでは、100の同時接続の場合、応答時間は約1.5〜2.5秒です。リモートテストを実行しているネットワークには十分な帯域幅があり、実行しているコンピューターには十分なRAMとプロセッサ速度があります。それは高速なビジネスネットワークです。私は他の2台のコンピューターで、米国中の他の2つのネットワークを試しましたが、速度はほぼ同じです。

マルチスレッドスクリプトを実行しているときに、100を超える同時要求を試行するとすぐに一時中断します。これは外部ネットワークからのものです。サーバー上のPythonを3+にアップグレードするか、スクリプトを2.7互換に変更する必要があるため、サーバー上でスクリプトをローカルでまだ試していません。これをローカルでテストし、最大1000個のマルチスレッド接続でスクリプトを実行すると、150ミリ秒の応答時間が得られました。これは、単にurllib2を使用しているだけです。

私はこれを直接nginx(静的ファイル)、nginxの背後にあるpywsgiアプリ、およびpywsgiに対して直接テストしています。pywsgiアプリには、基本的な応答で応答する単純なルートがあるため、高速になります。驚くことではありませんが、nginx-> pywsgiが最良の結果を提供します。これは、おそらくリクエストをバッファリングする方法が原因です。この問題を引き起こしているLinodeのネットワークに固有の何かがありますか?内部テストと外部テストの桁違いの違いにより、何が原因であるのか疑問に思います。唯一の方法は、http / sとsshでフィルタリングするiptablesファイアウォールだけです。

dmesgには、私のテストに関する情報はありません。


2
テストの起動元のコンピューターは強力であるとおっしゃいましたが、テストマシンのプロセスモニターは使用されているリソースについて何と言っていますか?最初にテストを行ったとき、サーバーをテストするその古典的な問題ベンチマークに遭遇しました。テストを実行していたマシンは、応答を十分に速く処理できませんでした。それはかもしれない、私はまだネットワークの疑いがあるものの、サーバー自体のテストは、すぐに返す理由を説明します。マークの答えに関する私のコメントを参照してください。
msanford

回答:


1

デスクトップマシンとLinodeマシンの間にネットワークボトルネックがあるように聞こえます。いくつかの提案:

  1. デスクトップからLinodeやインターネット上の他の場所(google.comやyahoo.comなど)とのping時間を比較します。
  2. traceroute your-linode-ipデスクトップから使用して、ボトルネックを見つけるのに役立つかどうかを確認します。
  3. http://www.webpagetest.org/を使用してLinodeを試して、East CoastとWest Coastの両方の場所を選択し、それらがどのように変化するかを確認してください。

1
+1実際、これは最も明らかな場所です。もう1つ確認すべきことは、テスト用コンピューターがDDoSボットと間違えられておらず、ファイアウォールの1つ(サーバー自体への発信、着信)によってレート制限されていないことです。
msanford

1
Ddosが答えかもしれません。おそらくlinodeネットワークがこれを制限しているのかもしれません。
スケープ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.