lsof¶
O que é¶
lsof (List Open Files) lista arquivos abertos por processos. Em Linux, sockets também são “arquivos”, então a ferramenta é excelente para descobrir exatamente qual processo/FD está usando uma porta ou conexão.
Para que serve¶
- Descobrir qual PID está prendendo uma porta após deploy/restart.
- Mapear conexões de rede abertas por processo específico.
- Correlacionar socket de rede com file descriptor (FD) e usuário efetivo.
- Ajudar em investigação de vazamento de conexão/FD (
too many open files).
Quando usar¶
bind: address already in useao subir serviço.- Porta aparece aberta, mas você precisa saber qual binário e qual usuário abriu.
- Processo Java/Node/Python com suspeita de leak de sockets.
- Necessidade de investigar conexões por PID durante incidente sem reiniciar serviço.
Exemplos de uso¶
# Quem está usando a porta 8080
lsof -nP -iTCP:8080 -sTCP:LISTEN
# Conexões de rede de um PID específico
lsof -nP -p 1234 -i
# Ver todos sockets TCP em LISTEN no host
lsof -nP -iTCP -sTCP:LISTEN
# Filtrar por usuário dono do processo
lsof -nP -i -u nginx
Exemplo de saída¶
$ lsof -nP -iTCP:8080 -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 4242 app 95u IPv6 58231 0t0 TCP *:8080 (LISTEN)
Como interpretar:
COMMAND/PID/USER: dono do socket.FD(95u): file descriptor usado pelo processo; útil para debug avançado.NAME(*:8080): bind em todas interfaces.(LISTEN)/(ESTABLISHED): estado da conexão.
Dicas de troubleshooting¶
- Sempre use
-nPpara evitar resolução DNS/porta e ganhar velocidade. - Se resultado vier vazio, valide privilégios (muitos dados exigem root).
- Combine com
ss -tanppara ver estado global e depois aprofunde no processo comlsof. - Para leak de FD, compare amostras no tempo:
lsof -p <PID> | wc -l.
Comparação com ferramentas similares¶
lsofvsss:ssmostra panorama de sockets;lsofaprofunda no processo/FD.lsofvsfuser:fuseré rápido para “quem usa esta porta”,lsoftraz mais contexto.
Flags importantes¶
-i: filtra objetos de rede.-iTCP[:porta]/-iUDP[:porta]: protocolo/porta.-sTCP:LISTEN|ESTABLISHED: estado TCP.-p <PID>: filtra por processo.-u <usuário>: filtra por usuário.-nP: sem resolução de host/serviço.
Boas práticas¶
- Padronize
lsof -nPem runbooks para reduzir variabilidade. - Não use
killdireto sem confirmar se o PID pertence ao serviço correto. - Em produção, capture evidências (
lsof,ss, logs) antes de qualquer ação corretiva. - Se houver supervisão (
systemd,k8s), mate processo apenas com entendimento do impacto.
Referências¶
man lsof- FAQ oficial: https://github.com/lsof-org/lsof/blob/master/00FAQ
- Quickstart: https://man7.org/linux/man-pages/man8/lsof.8.html