Determina o processo de origem para o tráfego de saída

7

Eu posso ver que meu servidor está enviando muito tráfego. Se eu for netstat -apln | grep httpd Eu posso ver que todo o tráfego está indo para um IP.

Existe uma maneira de ver qual script / arquivo está sendo usado para enviar os dados para esse IP? Ou qualquer IP em geral?

Eu sei que o tcpdump pode olhar para os pacotes, mas não pode ser uma maneira de fazer isso.

    
por user2078802 29.11.2014 / 00:05

5 respostas

4

O comando netstat só pode informar quais conexões estão abertas no momento, mas não quanto tráfego cada uma enviou e recebeu. Para descobrir quais conexões estão transferindo a maioria dos dados, você precisaria usar outras ferramentas que poderiam, por exemplo, ser iftop ou tcpdump .

O que você faz a seguir depende muito da vida útil de cada conexão e de qual terminal estabeleceu a conexão. Se o seu fim é o servidor, então você deve ser capaz de identificar o socket de escuta pertencente ao processo do servidor.

Se, de fato, for um processo httpd (como você parece sugerir na sua pergunta), o log de acesso do servidor da Web é o local a ser exibido. Uma ressalva a ter em mente é que cada solicitação é registrada apenas quando a transferência para essa solicitação é concluída. Isso pode fazer uma diferença significativa se você estiver veiculando arquivos, que têm muitos MB.

Se o seu destino for o cliente, você não verá soquetes de escuta, mas caso as conexões sejam de longa duração, você poderá encontrar as conexões e o processo correspondente usando netstat , depois de confirmar qual conexão está consumindo largura de banda.

Se a investigação descrita acima levar você a descobrir que a maioria do tráfego acontece em conexões de curta duração estabelecidas a partir do seu fim, então netstat não é suficiente para identificar qual processo é responsável. Esse cenário específico foi abordado em uma pergunta mais antiga .

    
por 29.11.2014 / 00:20
2

nethogs informa a largura de banda usada por processo, atualizada uma vez por segundo.

    
por 29.11.2014 / 10:54
1

Você pode tentar usar lsof para verificar quais processos estão usando as conexões de rede.

Relacione todas as conexões de rede: lsof -i

Listar todas as conexões TCP ou UDP: lsof -i tcp; lsof -i udp;

Processa a escuta em uma porta específica: lsof -i :80

Relacione os arquivos de rede que estão sendo usados por um processo: lsof -i -a -p 234

Relacione os arquivos de rede abertos pelos processos que começam com ssh: lsof -i -a -c ssh

    
por 29.11.2014 / 00:42
1

netstat -nlpt (deve ser executado como sudo ou root) retornará o pid / nome do processo responsável por uma conexão. Desde que você conhece o IP, você deve ser capaz de simplesmente fazer

sudo netstat -nlpt | grep xx.xx.xx.xx

e veja qual processo é. Minha habilidade é mais no Windows, então minha sintaxe pode estar um pouco errada. Eu procurei os switches do linux e achei isso como # 5 aqui .

    
por 29.11.2014 / 05:09
0

Esta foi uma questão interessante, e parece que o kernel não armazena contadores para utilização de throughput de rede por processo por padrão, mas um módulo de núcleo netatop [1] adiciona essa capacidade, que então a torna disponível para registro e relatório. usando em cima [2].

[1]: veja o link
  [2]: veja o link

    
por 29.11.2014 / 07:47

Tags