No Linux, como posso saber quantas portas efêmeras estão disponíveis?

14

Existe um método no Linux para verificar quantas portas efêmeras estão disponíveis? Ocasionalmente, vejo erros de "Endereço já em uso" como resultado da falta de portas efêmeras. Uma reinicialização da máquina resolverá isso, mas seria melhor pegá-lo antes que aconteça.

    
por JMc 20.04.2011 / 12:10

2 respostas

22

O intervalo de portas epérmicas é especificado em /proc/sys/net/ipv4/ip_local_port_range . Você provavelmente pode estendê-lo para correr de 16k a 64k.

Você pode ver o número de conexões abertas usando netstat -an . Sockets podem estar presos no estado TIME_WAIT se você estiver abrindo e fechando muitas conexões. Em alguns lugares isso é inevitável, mas você pode precisar considerar se você precisa de um pool de conexão, se este for o caso.

Se TIME_WAIT for o problema, você pode definir net.ipv4.tcp_tw_reuse / net.ipv4.tcp_tw_recycle para acelerar a rotatividade de conexões.

    
por 20.04.2011 / 12:39
0

Tenha em mente que esse limite se aplica por tupla única (IP de origem, IP de ponto, porta de mesmo nível). Portanto, você precisará agrupar a saída de netstat / ss por cada uma dessas tuplas e verificar a proximidade de cada grupo com o limite de conexão.

Este post explica como você pode fazer esse agrupamento em Mais detalhes. Para verificar o quão perto cada grupo está do limite em Ruby, você pode processar ss output como:

groups = Hash.new(0)
conns.lines.each do |conn|
  state, recvq, sendq, local, peer = conn.split
  local_ip, local_port = local.split(':')
  group = [local_ip, peer]
  groups[group] += 1
end

groups.each do |group, used_port_count|
  if used_port_count > ephemeral_port_warning
    puts
      "WARNING: connections from #{group[0]} to #{group[1]} have used "\
      "#{used_port_count} ephemeral ports out of #{ephemeral_port_max} max"
  end
end
    
por 22.05.2018 / 14:19

Tags