Существует ли команда top-like, показывающая пропускную способность сети и доступ к файлам запущенных процессов

31

Например, мы хотели бы увидеть:

PROCESS       IF       TX       RX       FILE(regular) R/W
prog1         eth0     200kB/s  12kB/s   --            --
              wlan0    12kB/s   100kB/s  --            --
              --       --       --       file1         R
              --       --       --       file2         R
              --       --       --       file3         W
prog2         eth0     0kB/s    200kB/s  --            --
              --       --       --       file4         W
              --       --       --       file5         W

Это возможно? nethogs показывает только TX / RX, а lsof показывает только доступ к файлу.

В настоящее время я делаю двухэтапный процесс, например, так:

sudo nethogs
sudo lsof -a -d 1-999 -c hogging_program /

Есть ли способ лучше?

silvernightstar
источник

Ответы:

5

Насколько я знаю, нет. То, что вы пытаетесь выполнить, возможно, комбинируя несколько команд, как вы делаете в настоящее время, хотя я не знаю других приложений, которые предоставили бы вам данные для анализа (ред .: другой ответ предложил, если бы я не знал, добавил однострочный режим вывода текста по конвейеру). С некоторыми умными сценариями оболочки, переданными по конвейеру данными и небольшим количеством ручного форматирования, вы можете получить, по крайней мере, близкий результат, который вы ищете.

Ваш поиск чего-то, что показывает как сетевую, так и файловую статистику - которая будет предоставляться двумя разными частями операционной системы - кажется, противоречит некоторым арендаторам «Философии UNIX»:

  • Заставьте каждую программу хорошо делать одну вещь. Чтобы выполнить новую работу, создавайте заново, а не усложняйте старые программы, добавляя новые функции.
  • Ожидайте, что выходные данные каждой программы станут входными данными для другой, пока неизвестной программы. Не засоряйте вывод посторонней информацией.

Это особенно заметно в программах, которые выводят текст, например lsof. Обычно вы не видите консольных программ * NIX, предоставляющих пользовательский интерфейс в той же степени, что и данные для передачи в другую программу, или, возможно, сценарий, использующий команды оболочки, такие как cut, для создания своих собственных специально настроенных выходных данных.

Даг Макилрой резюмировал свое раннее заявление спустя годы:

Напишите программы, которые делают одно и делают это хорошо. Напишите программы для совместной работы. Написание программ для обработки текстовых потоков, потому что это универсальный интерфейс.

Хотя это может не помочь вам получить форматированный вывод, который вы ищете, «Искусство программирования в UNIX» хорошо читается, и там я нашел источники для этих цитат.

overprescribed
источник
7
Это не дает ответа на вопрос.
кошка
Это возможно? - Я полагаю, что то, что вы пытаетесь выполнить, возможно, лучше (и насколько я знаю только) возможно объединить несколько команд, как вы делаете в настоящее время. -- Есть ли способ лучше? Я полагаю, что то, что вы пытаетесь, вероятно, является лучшим и единственно возможным, чтобы убедить несколько команд ... с некоторыми умными сценариями оболочки и переданными данными вы можете получить результат [отформатированный так, как вы ищете). - какой вопрос я пропустил? может быть лучше ответить с упоминанием сценариев по конвейерной оболочке, но ваш полезный отзыв не упомянул, что: p является правильным ответом работающий сценарий?
переписано
Я считаю, что то, что вы пытаетесь достичь, лучше всего описать как «ответ на вопрос»; не читать лекции по философии.
Гарднер Бикфорд
Я поставлю ответ более ясно в верхней части. Однако, без урока философии, никто не узнает, почему ответ отрицательный, и может вернуться в Интернет, никогда не понимая мудрых слов Linux Torvalds; «Философия Linux - это« Смейся перед лицом опасности! » Упс. Неправильно. Сделай сам. Это оно."
overprescribed
17

Попробуйте iftop для сети и pidstat от sysstat .

Оба, вероятно, легко устанавливаются (apt-get и т. Д.) Для дистрибутива по вашему выбору.

желе фокс
источник
6

atopдаёт какой-то способ дать вам то, что вы хотите, хотя это не было бы так же специфично, как разбивка ввода-вывода с помощью дескриптора файла. Чтобы получить полную сетевую статистику, вы должны применить исправление ядра.

Flup
источник
2

iptraf может быть очень полезен для поиска пропускной способности.

NinjaTec
источник
5
Добавление дополнительной информации / объяснения сделает ваш ответ лучше.
MTK