¿Por qué la lectura de /proc/net/tcp lleva tanto tiempo y devuelve rápidamente el mismo tipo de datos sobre la tabla de conexiones?

¿Por qué la lectura de /proc/net/tcp lleva tanto tiempo y devuelve rápidamente el mismo tipo de datos sobre la tabla de conexiones?

En Linux 2.6.32, si lee (por ejemplo, cat) /proc/net/tcp, en un sistema muy cargado (por ejemplo, un servidor web), encontrará que leer 100.000 entradas lleva más de 30 segundos. Eso es un largo tiempo.

¿Qué está pasando detrás de escena? ¿Se está bloqueando?

Mucha gente menciona la velocidad del comando 'ss'. ¿Qué hace el comando 'ss' que 'cat /proc/net/tcp' o 'netstat' no hace y que lo hace mucho más rápido?

Respuesta1

ssutiliza la AF_NETLINKcapa de socket para comunicarse con el kernel. Este es un protocolo de nivel inferior pero permite transferir datos muy rápidamente y en grandes cantidades. Un vistazo rápido stracea CentOS 7 muestra que establece la ventana de transferencia en 1 Mb.

información relacionada