Existe uma ferramenta que pode monitorar o uso da largura de banda de um único processo?

14

Encontrei um monitor agradável que me permite registrar uma variedade de dados de tempo de execução de um único processo. Eu estou procurando um equivalente que faz o mesmo para uso de largura de banda. Idealmente, o comando deve se parecer com bwmon --pid 1 --log init.log . Existe tal? Pode ser executado sem privilégios de administrador?

    
por Tshepang 04.02.2011 / 18:26

3 respostas

3

algo para você começar (apenas no caso de você querer escrever você mesmo):

#!/bin/bash
#
# usage: bwmon PID

IN=0; OUT=0; TIME=0

get_traffic() {
    t='awk '/eth0:/ { printf("%s,%d,%d\n",strftime("%s"),$2,$10); }' < /proc/$1/net/dev'
    IN=${t#*,}; IN=${IN%,*}
    OUT=${t##*,};
    TIME=${t%%,*};
}

get_traffic $1
while true
do
    _IN=$IN; _OUT=$OUT; _TIME=$TIME
    get_traffic $1
    echo "$TIME,$(( $TIME - $_TIME )),$IN,$(( $IN - $_IN )),$OUT,$(( $OUT - $_OUT))"
    sleep 1
done

comentários:

  • verifica apenas eth0
  • verifica a cada 1 segundo
  • funciona apenas no linux, mas outros unixes funcionam de forma semelhante (procfs ou qualquer outro)
  • A saída
  • pode ser armazenada em um sqlite.db com stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3
por 04.02.2011 / 20:35
6

Se você estiver satisfeito com a largura de banda geral de E / S usada (ou se o seu programa faz quase todo o I / O de rede), então você pode assistir ao arquivo /proc/<pid>/io . Você deseja os campos rchar e wchar . Você pode querer subtrair read_bytes e write_bytes , pois eles representam leituras e gravações na camada de armazenamento. Consulte a seção 3.3 do link .

Se você precisar de mais resolução ... talvez você possa fazer o script usando lsof e strace , embora seja doloroso acertar todos os casos. A ideia básica é analisar a saída de strace -p <pid> , pegando o primeiro parâmetro (= o descritor de arquivo) e o valor de retorno (= número de bytes) de read() , write() , send() e recv() chamadas ( OBSERVAÇÃO existem vários outros syscalls para escutar; eu não os rastreei). Descartar valores negativos; eles indicam erros. Use lsof -p <pid> para descobrir quais descritores de arquivos são soquetes TCP / UDP e soma as contagens por fd. Essa estratégia não requer raiz, contanto que você seja o proprietário do processo que está inspecionando, mas seria realmente complicado escrever, quanto mais escrever bem.

    
por 05.02.2011 / 10:20
3

experimente os nethogs :

NetHogs is a small 'net top' tool. Instead of breaking the traffic down per protocol or per subnet, like most tools do, it groups bandwidth by process. NetHogs does not rely on a special kernel module to be loaded. If there's suddenly a lot of network traffic, you can fire up NetHogs and immediately see which PID is causing this. This makes it easy to indentify programs that have gone wild and are suddenly taking up your bandwidth.
    
por 04.02.2011 / 20:22