Elastic Load Balancing (ELB) Classic Load Balancer に接続すると高レイテンシーになります。
簡単な説明
Classic Load Balancer で高レイテンシーが発生する原因は次のとおりです。
- ネットワーク接続に問題がある
- Classic Load Balancer の設定が不適切
- バックエンドインスタンスのメモリ (RAM) 使用率が高い
- バックエンドインスタンスの CPU 使用率が高い
- バックエンドインスタンスのウェブサーバー設定が不適切
- 外部データベースや Amazon Simple Storage Service (Amazon S3) バケットなどのバックエンドインスタンスで実行されるウェブアプリケーションの依存関係に問題がある
解決策
1. Classic Load Balancer のネットワーク接続に関する問題のトラブルシューティングを行います。
2. ユースケースに合わせて Classic Load Balancer を設定します。
3. Classic Load Balancer のアクセスログをチェックして、どのバックエンドインスタンスが高レイテンシーになっているかを判断します。backend_processing_time を確認して、レイテンシーの問題があるバックエンドインスタンスを探し出します。
バックエンドインスタンスのウェブアプリケーションサーバーが高レイテンシーになっていることを確認するため、curl を使用して 1 つ目のバイトの応答を測定します。
[ec2-user@ip-192.0.2.0 ~]$ for X in `seq 6`; do curl -Ik -w "HTTPCode=%{http_code} TotalTime=%{time_total}\n" http://www.example.com/ -so /dev/null; done
High Latency sample output:
HTTPCode=200 TotalTime=2.452
HTTPCode=200 TotalTime=1.035
Low latency sample output:
HTTPCode=200 TotalTime=0.515
HTTPCode=200 TotalTime=0.013
4. Classic Load Balancer の Amazon CloudWatch レイテンシーメトリックの平均値の統計を確認します。値が大きい場合は、バックエンドインスタンスまたはアプリケーション依存サーバーに問題があります。
5. レイテンシーメトリックの最大値の統計を確認します。値がアイドルタイムアウト値以上になると、リクエストがタイムアウトし、HTTP 504 エラーが発生します。
6. レイテンシーメトリックのパターンを確認します。メトリックが一定の間隔で急上昇する場合、バックエンドインスタンスのパフォーマンスに問題が発生しています。スケジュールしたタスクによるオーバーヘッドが原因です。
7. ELB の CloudWatch SurgeQueueLength メトリックを確認します。Classic Load Balancer へのリクエストが最大値 (1024) を超えると、リクエストは拒否され、ロードバランサーでは HTTP 503 エラーを生成します。SpilloverCount メトリックの合計値の統計は、拒否されたリクエストの総数を測定したものです。詳細については、「ELB での Classic Load Balancer のキャパシティーの問題のトラブルシューティングを教えてください。」を参照してください。
8. バックエンドインスタンスで処理されている Apache を確認して、メモリで問題が発生していないかチェックします。
コマンド例:
watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"
出力例:
Every 1.0s: echo –n 'Apache Processes: ' && ps –C apache2 –no-
headers | wc -1 && free –m
Apache Processes: 27
total used free shared buffers cached
Mem: 8204 7445 758 0 385 4567
-/+ buffers/cache: 2402 5801
Swap: 16383 189 16194
9. バックエンドインスタンスの CloudWatch CPUUtilization メトリックを確認します。CPU 使用率が高くなっていないか、CPU 使用率が急上昇していないかを確認します。CPU 使用率が高い場合は、インスタンスをより大きなインスタンスタイプにアップグレードしてください。
10. バックエンドインスタンスのウェブサーバーの MaxClient 設定を確認します。この設定は、インスタンスで処理できる同時リクエストの数を定義するものです。インスタンスでメモリと CPU の使用率が適切なのに高レイテンシーになっている場合は、MaxClient の値を増やします。
Apache (httpd) で生成されるプロセスの数を MaxClient 設定と比較します。Apache プロセスの数がたびたび MaxClient 値に達する場合は、値を増やしてください。
コマンド例:
[root@ip-192.0.2.0 conf]# ps aux | grep httpd | wc -l 15
出力例:
<IfModule prefork.c>
StartServers 10
MinSpareServers 5
MaxSpareServers 10
ServerLimit 15
MaxClients 15
MaxRequestsPerChild 4000
</IfModule>
11. バックエンドインスタンスのレイテンシーの問題の原因となる依存関係がないか確認します。
レイテンシーの問題を発生させる可能性のある依存関係の一部を次に示します。
- 共有データベース、S3 バケットなどの外部リソース
- ネットワークアドレス変換 (NAT) インスタンスなどの外部リソース接続
- リモートウェブサービス
- プロキシサーバー
関連情報
Classic Load Balancer のモニタリング