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.
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 ...
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.
Tags monitoring bandwidth