Я хотел бы измерить пропускную способность, использованную единственным запуском программы (для процессов, запущенных от крона, для понимания то, сколько BW они используют). Я знаю о nethogs и многих других командах, которые измеряют пропускную способность / порт для каждого устройства.
Идеально, это было бы что-то как струйка, которая предварительно ожидается к команде, и на завершении сообщает об используемых данных. Мое исследование подходит без результатов.
Моя единственная альтернативная идея состоит в том, чтобы использовать ifconfig для получения байтов перед запуском и после завершения, но это очевидно очень грубо. Идеи для чего-нибудь лучше?
Я предполагаю, что струйка могла использоваться в качестве более легкой начальной точки для такой программы, если бы у каждого было достаточно времени для кодирования ее...
nethogs
делает это: http://nethogs.sourceforge.net/ , установите его с помощью центра программного обеспечения.
я полагаю, что sysdig
мог использоваться, также но у меня нет синтаксиса под рукой.
Одним путем я могу думать для переданных данных, должен использовать iptables, при запущении программы при некотором уникальном matchable условии, таком как отдельная группа.
Первый, выберите группу, которой Вы принадлежите и под которым не работают никакие процессы:
$ for i in $(groups); do echo $i $(pgrep -c -G $i); done | awk '$2 == 0'
cdrom 0
sudo 0
plugdev 0
lpadmin 0
sambashare 0
debian-tor 0
libvirtd 0
я выберу debian-tor
. Теперь добавьте правило iptables, которое будет соответствовать трафику, происходящему из процесса в этой группе. Это должно будет базироваться доступ, поэтому добавьте sudo
к весь 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
Запускают Ваше приложение:
sg debian-tor 'ssh a.friendly.system "cat - >/dev/null" </dev/zero'
Проверка статистика:
$ iptables -vL STATS
Chain STATS (1 references)
pkts bytes target prot opt in out source destination
148K 393M ACCEPT tcp -- any any anywhere anywhere
Это не будет работать на полученные данные.: (
<час> другой путь мог состоять в том, чтобы использовать /proc/$PID/netstat
, если можно убедить приложение оставаться в живых достаточно долго:
$ 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
(Все, что awk
код должен искать InOctects
и OutOctects
столбцы в netstat
файл.)
, К сожалению, /proc/$PID/net
просто /proc/net
, так, чтобы информация была характерна для всех процессов. Чтение netstat
не дает информации о конкретном процессе.