Ich mache eine Kapazitätsplanung und habe mich gefragt, ob es eine Formel gibt, mit der ich (vom Standpunkt des Speichers aus) vorhersagen kann, wie viele TCP-Verbindungen ich auf meinem Server verarbeiten kann. Im Moment mache ich mir nur Sorgen um den Speicherbedarf.
Einige Variablen, von denen ich denke, dass sie in der Formel angezeigt werden, sind:
- sysctl's
net.ipv4.tcp_wmem
(min oder Standardwert) - sysctl's
net.ipv4.tcp_rmem
(min oder Standardwert) - die Größe der Datenstrukturen sock, sock_common, proto und anderer Datenstrukturen pro Socket.
Ich bin nicht sicher, wie viel von tcp_wmem und tcp_rmem tatsächlich zugewiesen ist und wann dieser Speicher zugewiesen wird. Zur Zeit der Socket-Erstellung? Auf Nachfrage?
tcp_mem ist wichtiger, da es definiert, wie sich der TCP-Stack bei der Speichernutzung verhalten soll. Der IMO-Sende- und Empfangspuffer sollte ein Vielfaches von tcp_mem sein. Hier ist ein Link zu einer Formel für den Empfangspuffer: http://www.acc.umu.se/~maswan/linux-netperf.txt . Zusamenfassend:
Folgendes sagt der Artikel über tcp_mem:
IMO beschleunigt ein größerer mittlerer tcp_mem-Wert die Verbindung bei geringerem Sicherheitsverlust und erhöht die Speichernutzung geringfügig.
Sie können den Netzwerkstapel überwachen mit:
quelle
David hat eine sehr gute Antwort auf die gestellte Frage gegeben. Wenn Sie jedoch nicht ausschließlich LFNs verwenden, sind die TCP-Puffer selbst auf einem ereignisbasierten Server wahrscheinlich nur ein kleiner Teil des Footprints pro Verbindung.
Für die Kapazitätsplanung gibt es keinen Ersatz dafür, den Server zu testen und die Regression der Speichernutzung nach Last zu berechnen.
quelle