當我連接到 Elastic Load Balancing (ELB) Classic Load Balancer 時,我遇到高延遲。
簡短描述
Classic Load Balancer 發生高延遲的原因如下:
- 網路連線問題
- 傳統 Classic Load Balancer 的組態不正確
- 後端執行個體的記憶體 (RAM) 使用率高
- 後端執行個體的 CPU 使用率高
- 後端執行個體的 Web 服務器配置不正確
- 在後端執行個體上執行的 Web 應用程式相依性問題,例如外部資料庫或 Amazon Simple Storage Service (Amazon S3) 儲存貯體
解決方法
-
疑難排解 Classic Load Balancer 的網路連線問題。
-
針對您的使用案例設定 Classic Load Balancer。
-
檢查 Classic Load Balancer 的存取日誌,以判斷哪些後端執行個體經歷高延遲。檢閱 backend_processing_time 以尋找有延遲問題的後端執行個體。
若要驗證後端執行個體的 Web 應用程式伺服器是否遇到高延遲,請使用 curl 來測量第一個位元組回應:
[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
- 檢查 Classic Load Balancer 的 Amazon CloudWatch 延遲指標的平均統計資料。如果值很高,則後端執行個體或應用程序依賴伺服器存在問題。
5. 檢查延遲指標最大統計資料。如果該值達到或超過閒置逾時值,則要求將逾時,並導致 HTTP 504 錯誤。
-
檢查延遲指標度量中的模式。固定間隔的指標尖峰表示後端執行個體因排定工作的額外負荷而造成效能問題。
-
檢查 ELB 的 CloudWatch SurgeQueueLength 指標。如果向 Classic Load Balancer 傳送給的請求超過最大值 (1024),則會拒絕要求,且負載平衡器會產生 HTTP 503 錯誤。SpilloverCount 指標的總統計資料會測量拒絕的請求總數。如需詳細資訊,請參閱如何疑難排解 ELB 中的 Classic Load Balancer 容量問題?
-
檢查在後端執行個體上執行的 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. 檢查後端執行個體上 Web 伺服器的 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) 執行個體
- 遠端 Web Services
- 代理伺服器
相關資訊
監控 Classic Load Balancer