Netstat -s zeigt (und wächst) "Pakete aus der Empfangswarteschlange entfernt" und "Pakete in der Empfangswarteschlange reduziert"

7

wir sehen folgendes:

[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]#

Das obige ist eine frisch neu gestartete Box ... Ungefähr 1 Stunde Betriebszeit. Wir hatten vor kurzem eine Box, die 2 Monate in Betrieb war, und diese Zähler werden in die hohen Millionen (XXX Millionen) gehen.

Wir haben versucht, verschiedene sysctl-Variablen zu ändern ...

Hier sind unsere sysctl-Variablen, von denen ich glaube, dass sie verwandt sind:

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

Weiß jemand, wie man diese beschnittenen Pakets auflöst, weil der Socket-Puffer überlaufen / Pakete zusammenbrechen (was meines Wissens nicht so schlimm ist wie die beschnittenen Pakete)?

Vielen Dank.

anonym-one
quelle
1
Wie viele Speicher hast du? cat /proc/sys/net/ipv4/tcp_mem? cat /proc/net/sockstat?
Quanten
1
Können Sie die Ausgabe von sudo ss -lnpanzeigen?
SaveTheRbtz

Antworten:

2

Nach den von Ihnen bereitgestellten Informationen zu urteilen und da Sie anscheinend bereits mehr Puffer haben, liegt das Problem höchstwahrscheinlich bei Ihrer Anwendung. Das grundlegende Problem hierbei ist, dass das Betriebssystem die Netzwerkpakete zwar empfängt, diese jedoch nicht schnell genug verarbeitet werden und daher die Warteschlange füllen.

Dies bedeutet nicht unbedingt, dass die Anwendung für sich genommen zu langsam ist. Es ist auch möglich, dass sie aufgrund zu vieler anderer Prozesse, die auf diesem Computer ausgeführt werden, nicht genügend CPU-Zeit erhält.

römisch
quelle
2

Tatsächlich haben Sie die Puffer nicht unbedingt erhöht. lediglich die maximal mögliche Größe der Warteschlangen.

Wenn Sie einen Socket öffnen, werden die Warteschlangen auf den Wert net.core.rmem_default = 212992 net.core.wmem_default = 212992 gesetzt

Das Erhöhen der Maxima bewirkt also nichts, es sei denn, die Anwendung ruft setsockopt () auf, um die Warteschlangengröße zu erhöhen (und schlägt fehl, wenn das Maximum unter der Größe liegt, die sie zuzuweisen versucht).

Versuchen Sie, die obigen Werte zu erhöhen.

Graham Nicholls
quelle