Estoy planeando algo de capacidad y me preguntaba si hay una fórmula que pueda usar para predecir (desde el punto de vista de la memoria) cuántas conexiones TCP podría manejar en mi servidor. Por el momento, solo me preocupan los requisitos de memoria.
Algunas variables que creo que aparecerán en la fórmula son:
- sysctl
net.ipv4.tcp_wmem
(valor mínimo o predeterminado) - sysctl
net.ipv4.tcp_rmem
(valor mínimo o predeterminado) - El tamaño del calcetín, sock_common, proto y otras estructuras de datos por socket.
No estoy seguro de cuánto de tcp_wmem y tcp_rmem se asignan realmente y cuándo se asigna esa memoria. ¿En el momento de la creación del socket? ¿Bajo demanda?
tcp_mem es más importante porque define cómo debe comportarse la pila tcp cuando se trata del uso de la memoria. El búfer de envío y recepción de IMO debe ser un múltiplo de tcp_mem. Aquí hay un enlace a una fórmula para recibir buffer: http://www.acc.umu.se/~maswan/linux-netperf.txt . En breve:
Esto es lo que dice el artículo sobre tcp_mem:
En mi opinión, un valor tcp_mem medio más grande acelera la conexión al perder menos seguridad y aumenta ligeramente el uso de memoria.
Puede monitorear la pila de red con:
fuente
David ha proporcionado una muy buena respuesta a la pregunta que se le hizo, sin embargo, a menos que esté utilizando exclusivamente LFN , incluso en un servidor basado en eventos, es probable que las memorias intermedias de TCP sean solo una pequeña parte de la huella por conexión.
Para la planificación de la capacidad no hay sustituto para probar el servidor y calcular la regresión del uso de memoria por carga.
fuente