1.通常の電流制限をテストします
1)次のように、流量を1qpsに制限し、電流をクライアントIPアドレスに制限するようにnginxを構成します(戻りステータスコードはデフォルトで503です)。
http{
limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s;
server {
listen 80;
server_name localhost;
location / {
limit_req zone=test;
root html;
index index.html index.htm;
}
}
2)複数のリクエストを継続的かつ同時に開始します。3)サーバーアクセスログを確認します。
少し拡張します。
ウィンドウズ:
【1】.nginxインストールディレクトリを開きます。
【2】。logsディレクトリに入ります。
【3】。ダブルクリックするとログファイルが表示されます。
Linux
【1】.vi / usr / local / nginx / logs / error.logコマンドを実行する
使用することもできます
[root @localhostログ] #tail -f access.log
09秒で4つのリクエストに連続して到達し、1つのリクエストのみが処理され、最初のリクエストが処理され、他の3つのリクエストが拒否されたことがわかります。
2.テストバースト
1)制限速度が1qpsの場合、レートを超えるリクエストは直接拒否されます。バーストトラフィックに対処するには、リクエストをキューに入れて処理できるようにする必要があります。したがって、burst = 5が設定されます。つまり、最大で5つのリクエストを処理のためにキューに入れることができます。
http{
limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s;
server {
listen 80;
server_name localhost;
location / {
limit_req zone=test burst=5;
root html;
index index.html index.htm;
}
}
2)abを使用して10個のリクエストを同時に開始します。ab-n10-c 10 http://127.0.0.1/index.html
3)サーバーアクセスログを確認します。ログによると、最初のリクエストが処理され、2から5までの4つのリクエストが拒否され、6から10までの5つのリクエストが処理されました。なぜこの結果になるのですか?
nginxソースコードのngx_http_log_moduleモジュールを確認してください。各リクエストはハンドラーをNGX_HTTP_LOG_PHASEステージに登録します(HTTPリクエスト処理の最後のステージはログを出力します[通常の処理と例外処理を含む])。
異常処理は正常処理ログより早く出力されます。
したがって、実際の状況は次のようになります。10個のリクエストが同時に到着し、最初のリクエストが到着して直接処理され、2番目から6番目のリクエストが到着し、処理がキューで遅延します(1秒に1回の処理)。 10番目までのリクエストは直接拒否されるため、最初にアクセスログを印刷します。
2番目から6番目の要求(キューイング遅延処理)は毎秒処理され、アクセスログは処理の完了後に出力されます。つまり、1つの要求が18から22秒で毎秒処理されます。
4)ab統計の応答時間は次のとおりです。最小応答時間は1ミリ秒、最大応答時間は5002ミリ秒、平均応答時間は1502ミリ秒です。
3テストノードレイ
1)2は、バーストを構成した後、バースト要求は処理のためにキューに入れられますが、応答時間が長すぎてクライアントがタイムアウトした可能性があることを示しています。したがって、構成ノードレイを追加して、nginxに待機中の要求を緊急に処理させて応答時間を短縮します。 :
2)abを使用して10個のリクエストを同時に開始します。ab-n10-c 10 http://127.0.0.1/index.html
3)サーバーアクセスログを確認します。最初のリクエストは直接処理され、2番目から6番目の5つのリクエストは処理のためにキューに入れられ(nodelayの構成、nginx緊急処理)、7番目から10番目の4つのリクエストは拒否されます
4)ab統計の応答時間は次のとおりです。最小応答時間は1ミリ秒、最大応答時間は2ミリ秒、平均応答時間は1ミリ秒です。
ここでは、主にいくつかの同時実行性の高いabストレステストの基本的な使用法を紹介します。これを使用して、独自のコードのパフォーマンスをテストできます。