免責事項: この記事には、サードパーティ製品に関する情報が含まれる場合があります。 そのような情報は参照だけのためです。 Alibaba Cloudは、明示または黙示を問わず、サードパーティ製品のパフォーマンスと信頼性、および製品に対する操作の潜在的な影響に関して、いかなる保証も行いません。
質問
SLBインスタンスはストレステストの対象です。 504ステータスコードまたはリクエストがタイムアウトしました。 ストレステストのURLは、ヘルスチェックが有効になっていないURL転送ルールで構成されています。
原因
ログサービスでSLBインスタンスログを表示すると、504ステータスコードがほとんどのリクエストで発生することがわかります。 ただし、upstream_response_timeの値は非常に規則的であり、応答時間は同時に5秒です。 これは、SLBとバックエンドサーバー間のTCP 3ウェイハンドシェイクが失敗し、504ステータスコードがタイムアウトした場合です。
説明注意: ログを表示するには、ログサービスを有効にする必要があります。
バックエンドサーバーにログインします。 Nginxログの内容は正常ですが、メッセージログに「nf_conntrack: table full, dropping packet」エラーが存在することを確認します。 この情報は、Linuxがカーネルネットワークスタックを通過するデータパケットごとに新しい接続エントリを生成するためです。 サーバが多くの接続を処理する場合、接続追跡テーブルは新しい接続エントリを記録することができず、サーバは新しい接続データパケットを破棄する。 したがって、SLBインスタンスとバックエンドサーバーTCP間の3方向ハンドシェイクが失敗し、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
ストレステストが正常であることを確認します。
適用範囲
SLB