次のようになります。
[root@primary data]# netstat -s | grep buffer ; sleep 10 ; netstat -s | grep buffer
20560 packets pruned from receive queue because of socket buffer overrun
997586 packets collapsed in receive queue due to low socket buffer
20587 packets pruned from receive queue because of socket buffer overrun
998646 packets collapsed in receive queue due to low socket buffer
[root@primary data]#
念頭に置いて、上記は再起動したばかりのボックスです...約1時間の稼働時間。私たちは最近2か月上回っていた箱を持っていました、そしてこれらの対抗者は何百万人(XXX百万)に向かいます。
さまざまなsysctl変数を変更してみました...
ここに私が関係していると私たちが信じているsysctl変数があります:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
ソケットバッファオーバーラン/パケットの折りたたみ(私はこれが剪定されたパケットほど悪いものではないと理解しています)が原因でこれらの剪定されたパケットを解決する方法を誰かが知っていますか?
ありがとう。
あなたが提供した情報から判断して、そしてあなたはすでにバッファを増やしているように見えるので、問題はおそらくアプリケーションにあります。ここでの根本的な問題は、OSがネットワークパケットを受信しても、十分に高速に処理されないため、キューがいっぱいになることです。
これは必ずしもアプリケーション自体が遅すぎることを意味するのではなく、そのマシンで実行されている他のプロセスが多すぎるために十分なCPU時間を取得できない可能性もあります。
実際、必ずしもバッファを増やしているわけではありません。キューの最大可能サイズにすぎません。
ソケットを開くと、キューは次の値に設定されます。net.core.rmem_default= 212992 net.core.wmem_default = 212992
したがって、最大値を増やしても何も起こりませんnlessアプリケーションは、setsockopt()を呼び出してキューサイズを増やします(最大値が割り当てようとしているサイズを下回っている場合は失敗します)。
上記の値を増やしてみてください。