Я нашел хороший монитор, который позволяет мне регистрировать различные данные времени выполнения одного процесса. Я ищу эквивалент, который делает то же самое для использования пропускной способности. В идеале команда должна выглядеть так bwmon --pid 1 --log init.log
. Есть ли такие? Может ли он работать без прав администратора?
monitoring
bandwidth
tshepang
источник
источник
Ответы:
что-то, с чего можно начать (на случай, если вы захотите написать это сами):
Комментарии:
stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3
источник
nc
пару клиент / сервер через localhost, отправляя один байт в секунду, и наблюдал/proc/<listening-nc-pid>/net/dev
. Затем я запустил вторуюnc
пару, отправив с максимальной скоростью. Файл, который я смотрел, очень явно подсчитывал данные второй пары вместе с данными первой пары. Работает на Linux 2.6.32.function strftime never defined
; это было исправлено установкой gawk ./proc/<pid>/net/dev
и здесь/proc/net/dev
тоже самое. Следовательно, scipt сообщает только трафик для eth0, а не для данного процесса.eth0
, как видно из процесса. Он не учитывает данные, отправленные процессом через этот интерфейс.Если вы удовлетворены общей используемой пропускной способностью ввода / вывода (или если ваша программа почти полностью выполняет сетевой ввод / вывод), вы можете посмотреть
/proc/<pid>/io
файл. Вы хотитеrchar
иwchar
поля. Возможно, вы захотите вычестьread_bytes
иwrite_bytes
, так как они представляют чтения и записи на уровне хранения. См. Раздел 3.3 http://www.kernel.org/doc/Documentation/filesystems/proc.txt .Если вам нужно больше разрешения ... вы можете написать сценарий, используя,
lsof
иstrace
, хотя было бы больно правильно все угадывать. Основная идея заключается в том, чтобы разобрать выводstrace -p <pid>
, захватывая первый параметр (= дескриптор файла) и возвращаемое значение (= число байт) изread()
,write()
,send()
иrecv()
вызовов ( ПРИМЕЧАНИЕ Есть еще несколько системных вызовов для прослушивания, я гавань» выследил их всех). Отбросить отрицательные значения; они указывают на ошибки. Используйте,lsof -p <pid>
чтобы выяснить, какие файловые дескрипторы являются сокетами TCP / UDP, и суммировать количество для fd. Эта стратегия не требует root, если вы владеете процессом, который вы проверяете, но писать было бы очень сложно, не говоря уже о том, чтобы писать хорошо.источник
попробуйте nethogs :
источник