Mede a largura de banda usada por uma única execução de programa

3

Eu gostaria de medir a largura de banda consumida por um único lançamento de programa (para processos iniciados a partir do cron, a fim de ter uma idéia de quanto BW eles estão usando). Eu conheço nethogs e muitos outros comandos que medem a largura de banda por dispositivo / porta.

Idealmente, seria algo como trickle, que é anexado ao comando e nos relatórios de finalização os dados usados. Minha pesquisa surge sem resultados.

Minha única idéia alternativa é usar ifconfig para obter os bytes transmitidos antes do lançamento e após a finalização, mas isso é obviamente muito difícil. Ideias para algo melhor?

Eu acho que trickle poderia ser usado como o ponto de partida mais fácil para tal programa, se alguém tivesse tempo suficiente para codificá-lo ...

    
por Álex 11.11.2014 / 10:27

2 respostas

0

nethogs faz isto: link , instale-o usando o centro de software.

Eu acredito que sysdig poderia ser usado também, mas eu não tenho a sintaxe à mão.

    
por Jan 11.11.2014 / 11:36
0

Uma maneira que eu posso pensar para os dados transmitidos é usar o iptables, enquanto executa o programa em alguma condição única de aprendizado, como um grupo separado.

Primeiro, escolha um grupo ao qual você pertence e sob o qual nenhum processo está em execução:

$ for i in $(groups); do echo $i $(pgrep -c -G $i); done | awk ' == 0'
cdrom 0
sudo 0
plugdev 0
lpadmin 0
sambashare 0
debian-tor 0
libvirtd 0

Eu escolho debian-tor . Agora, adicione uma regra iptables que corresponderá ao tráfego originado do processo desse grupo. Isso exigirá acesso root, então adicione sudo a todos os comandos iptables :

iptables -N STATS  # Create a new chain
iptables -A STATS -p tcp -j RETURN # And let it do nothing
iptables -A OUTPUT -p tcp -m owner --gid-owner debian-tor -j STATS

Inicie sua inscrição:

sg debian-tor 'ssh a.friendly.system "cat - >/dev/null" </dev/zero'

Verifique as estatísticas:

$ iptables -vL  STATS
Chain STATS (1 references)
 pkts bytes target     prot opt in     out     source               destination         
 148K  393M ACCEPT     tcp  --  any    any     anywhere             anywhere     

Isso não funcionará para os dados recebidos. : (

A outra maneira poderia ser usar /proc/$PID/netstat , se você conseguir convencer seu aplicativo a permanecer vivo por tempo suficiente:

$ awk '{for (i=1; i<=NF; i++) {($i~/(In|Out)Octets/) && a[i] = 1}; z=""; for (i=1; i<=NF; i++){(a[i] == 1) && z = z " " $i}; if (z) {print z}}' /proc/12307/net/netstat 
 InOctets OutOctets
 254543569761 2144044764834

(Tudo o que awk code deve procurar pelas colunas InOctects e OutOctects no arquivo netstat .)

Infelizmente, /proc/$PID/net é simplesmente /proc/net , para que as informações sejam comuns a todos os processos. A leitura de netstat não fornece nenhuma informação sobre o processo em particular.

    
por muru 11.11.2014 / 11:56