Outro dia fui realizar alguns testes em aplicações rodando no JBoss e verifiquei que nenhuma aplicação estava funcionando. Verifiquei no log do JBoss que o serviço iniciava e ocorria vários erros, informando que não conseguia fazer o deploy das aplicações.
Mesmo parando o serviço do JBoss, verifiquei com a ferramenta nmap que a porta 8080 continuava aberta.
# nmap -p 8080 localhost
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-11-12 14:09 BRST
Interesting ports on localhost.localdomain (127.0.0.1):
PORT STATE SERVICE
8080/tcp open http-proxy
Nmap finished: 1 IP address (1 host up) scanned in 0.012 seconds
Com o comando netstat verifiquei que realmente a porta estava na escuta por conexões.
# netstat -ntal | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
Atualização: Com a ferramenta netstat também é possível ver qual o número do processo que está utilizando determinada porta com a opção -p. Porém, neste post explicarei como obter o número do processo utilizando a ferramenta LSOF. O LSOF (list open files) é a ferramenta para listar os arquivos abertos no sistema. Utilizando a opção -i tcp o sistema irá retornar apenas os arquivos abertos por conexões tcp.
# lsof -i tcp
redir 10909 root 3u IPv4 442118 TCP *:webcache (LISTEN)
Dessa forma, se filtrarmos a saída do comando com o grep, não teremos o resultado esperado.
# lsof -i tcp | grep 8080
Isso porque o lsof por padrão faz a conversão das portas pelos serviços que as utilizam. Para desabilitar a conversão na execução do lsof, usamos a opção -P.
# lsof -i tcp -P | grep 8080
redir 12170 root 159u IPv4 878525 TCP *:8080 (LISTEN)
A segunda coluna nos mostra qual o PID do processo em execução e que está utilizando a porta 8080. Com isso, podemos matar o processo e iniciarmos o serviço que deve utilizar a porta.
Se você não filtrar a saída do lsof, verá que as colunas exibidas por padrão do lsof são:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
Espero que está dica poupe muito tempo na busca por soluções a respeito de problemas de portas abertas por outros serviços que não seja o que você está acostumado a rodar. Isso acontece muito em ambientes administrados por muitas pessoas. O lsof é uma ferramente bastante poderosa e seu uso deve ser colocado em prática. Para mais detalhes: man lsof.
Muito boa a dica, o fuser também é interessante:
ResponderExcluir$ fuser 8080/tcp
Só uma correção. Com a opção -p do netstat é possível sim ver o ID e o nome do processo que mantém uma porta aberta.
ResponderExcluir$ netstat -tanp | grep 8080
Obrigado pela contribuição. Já atualizei o post.
Excluir