說明
免責聲明: 本文檔可能包含第三方產品資訊,該資訊僅供參考。阿里雲對第三方產品的效能、可靠性以及操作可能帶來的潛在影響,不做任何暗示或其他形式的承諾。
問題描述
對SLB執行個體進行壓測,出現504狀態代碼、請求逾時的現象。壓測的URL配置了HTTPS監聽的URL轉寄策略,且該轉寄策略並沒有啟用健全狀態檢查。

問題原因
查看Log Service中的SLB執行個體日誌,發現大部分請求都出現504狀態代碼,但是upstream_response_time值都非常有規律,回應時間都是5秒,該情況是SLB與後端伺服器TCP三向交握失敗,導致連線逾時拋出504狀態代碼。
說明說明:查看該日誌需要您開通Log Service。

登入後端伺服器,排查發現Nginx日誌沒有異常,但是messages日誌存在“nf_conntrack: table full, dropping packet”錯誤。該資訊是因為Linux系統為每個經過核心網路棧的資料包,都產生一個新的串連記錄項,當伺服器處理的串連過多時,串連跟蹤表無法記錄新的串連記錄項,伺服器會丟棄建立串連的資料包。所以導致SLB和後端伺服器TCP三向交握失敗,出現504狀態代碼。
解決方案
建議調整nf_conntrack參數,調整命令如下所示,參數值請以實際情況為準。
說明說明:該方法會臨時修改參數,重啟執行個體後配置會不生效。
sysctl -w net.netfilter.nf_conntrack_max=1048576 sysctl -w net.netfilter.nf_conntrack_buckets=262144 sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=3600確認壓測正常即可。
適用於
Server Load Balancer
Elastic Compute Service