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.
cat /proc/sys/net/ipv4/tcp_mem
?cat /proc/net/sockstat
?sudo ss -lnp
anzeigen?Antworten:
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.
quelle
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.
quelle