tcp rcvprunedの原因を学びます。

tcp rcvprunedの原因を学びます。

毎日ロードバランサーからいくつかのrcvクリーンアップパケットを受信し、その理由が何であるかを知りたいです。

ここに画像の説明を入力してください。

しかし、私のtcp_memとtcp_memの使用量に基づいて特定のパケットが切り捨てられる理由はわかりません。

cat /proc/sys/net/ipv4/tcp_mem
6178080 8237440 12356160

ここに画像の説明を入力してください。

ベストアンサー1

RcvPrunedカーネルがこの機能を終了する前に、TCP MIBが増加してtcp_prune_queue()パケット損失が発生します。

これを行う前に、カーネルはソケットバッファのデータを縮小しようとします(データを一緒に圧縮してオーバーヘッドを削除します)。データは最初に順序付けされていないキューから切り捨てられ、次に通常の順序を持​​つキューから切り捨てられます。

これは、ソケットがメモリ不足状態にあり、ソケットバッファが十分に大きくないことを意味します。

あなたは上記でこう言いました。

net.ipv4.tcp_rmem = 183936 245248 367872

最大値は十分に大きくありません。必要に応じてソケットメモリを増やすことができるカーネルスペースを提供するには、この値を10倍に増やします。net.core.rmem_maxTCPウィンドウアカウントにも使用されるため、追加されます。

バッファサイズをどのように計算するかはわかりませんが、多くの小さなパケットトラフィック(HTTP要求など)のバランスを取ると、ほとんどのバッファ使用量がオーバーヘッドになります。

これの説明は、実行中のカーネルによって異なります。 「既存の」方法はいくつかの不正確な仮定をしましたが、かなり寛大であることが証明されており、「新しい」方法は正確に計算され、以前より少し大きいバッファサイズが必要でした。

これを変更したパッチセットは主にIIRCコンピューティングを中心に行われ、skb->truesizeカーネル3.0と3.10の間にいつか適用されました。

また、値を確認net.ipv4.tcp_memし、TCPが使用できるメモリの合計量を制限しないことを確認する必要があります。この調整可能パラメータの測定単位は次のとおりです。ページ、バイトではありません。個人的には、影響を受けないようにすべての値を非常に大きく設定しました。必要に応じて追加のメモリを購入してください。

おすすめ記事