Muy a menudo, en el curso de la resolución de problemas y ajustes, me encuentro pensando en la siguiente configuración del kernel de Linux:
net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn
Aparte fs.file-max
, net.ipv4.ip_local_port_range
, net.core.rmem_max
, net.core.wmem_max
, net.ipv4.tcp_rmem
, y net.ipv4.tcp_wmem
, parece ser que los mandos importantes para meterse con cuando se está sintonizando una caja para un alto nivel de concurrencia.
Mi pregunta: ¿Cómo puedo verificar para ver cuántos elementos hay en cada una de esas colas? Por lo general, las personas simplemente los configuran súper alto, pero me gustaría registrar esos tamaños de cola para ayudar a predecir fallas futuras y detectar problemas antes de que se manifiesten de manera notable para el usuario.
linux
kernel
networking
tcp
Colin Hostert
fuente
fuente
Respuestas:
¡Yo también me he preguntado esto y su pregunta me motivó!
He recopilado qué tan cerca podría estar de cada una de las colas que enumeró con información relacionada con cada una. Agradezco comentarios / comentarios, cualquier mejora en el monitoreo hace que las cosas sean más fáciles de administrar.
Mostrará el recuento global actual de conexiones en la cola, puede dividir esto por puerto y poner esto en declaraciones ejecutivas en snmpd.conf si desea sondearlo desde una aplicación de monitoreo.
Desde:
Estos le mostrarán con qué frecuencia está viendo solicitudes de la cola:
Desde:
http://linux.die.net/man/5/proc
Este archivo (de solo lectura) proporciona la cantidad de archivos actualmente abiertos. Contiene tres números: el número de identificadores de archivos asignados, el número de identificadores de archivos libres y el número máximo de identificadores de archivos.
Si puede crear una lista de servicios de exclusión (netstat -an | grep LISTEN), puede deducir cuántas conexiones se están utilizando para la actividad efímera:
También debe monitorear (desde SNMP):
También puede ser interesante recopilar estadísticas sobre todos los estados vistos en este árbol (establecido / time_wait / fin_wait / etc):
Tendría que trazar / estratificar su sistema para solicitudes setsockopt. No creo que las estadísticas de estas solicitudes se rastreen de otra manera. Esto no es realmente un valor que cambie desde mi comprensión. La aplicación que ha implementado probablemente le pedirá una cantidad estándar. Creo que podría 'perfilar' su aplicación con strace y configurar este valor en consecuencia. (¿discutir?)
Para realizar un seguimiento de lo cerca que está del límite, debe mirar el promedio y el máximo de los campos tx_queue y rx_queue (de forma regular):
Para rastrear errores relacionados con esto:
También debe estar monitoreando el grupo global 'buffer' (a través de SNMP):
fuente
Creo que puede obtener esos datos con SystemTap. Aquí está el manual de referencia de Redhat (pdf) . También hay una guía para principiantes (pdf) .
La herramienta se ve lo suficientemente versátil como para permitirle obtener esos datos, en particular se
probe::netdev.rx
parece a algo que le dará información sobre las entradas entrantes, ahora "solo" necesita encontrar el tamaño neto de la cola en el búfer o algo que cuente cosas dejando la cola ...fuente