¿Hay algún método en Linux para verificar cuántos puertos efímeros quedan disponibles? Ocasionalmente veo errores de "Dirección ya en uso" como resultado de quedarse sin puertos efímeros. Un reinicio de la máquina resolverá esto, pero sería mejor detectarlo antes de que ocurra.
17
Respuestas:
El rango de puertos ephermal se especifica en
/proc/sys/net/ipv4/ip_local_port_range
. Probablemente pueda extenderlo para que se ejecute de 16k a 64k.Puede ver la cantidad de conexiones abiertas usando
netstat -an
. Los sockets pueden estar atascados en el estado TIME_WAIT si está abriendo y cerrando muchas conexiones. En algunos lugares esto es inevitable, pero es posible que deba considerar si necesita un grupo de conexión, si este es el caso.Si TIME_WAIT es el problema, puede configurar
net.ipv4.tcp_tw_reuse
/net.ipv4.tcp_tw_recycle
para acelerar la rotación de la conexión.fuente
net.ipv4.tcp_tw_recycle
se eliminó en Linux 4.12/proc/sys/net/ipv4/ip_local_port_range
debe ser un subconjunto de 49152-65535. Por lo tanto, reducir el extremo inferior del rango a menos de 49152 conlleva cierto riesgo.Tenga en cuenta que este límite se aplica por tupla única (IP de origen, IP de igual, puerto de igual). Por lo tanto, deberá agrupar la salida de
netstat
/ss
por cada una de estas tuplas y verificar qué tan cerca está cada grupo del límite de conexión.Esta publicación explica cómo puedes hacer esta agrupación con más detalle. Para verificar qué tan cerca está cada grupo al límite en Ruby, puede procesar
ss
resultados como:fuente