Я хочу знать, есть ли эффективное решение для мониторинга потребления ресурсов процесса (процессор, память, пропускная способность сети) в Linux. Я хочу написать демона в C++, который выполняет этот мониторинг для некоторых заданных PID. Из того, что я знаю, классическое решение состоит в том, чтобы периодически читать информацию из/proc, но это не кажется наиболее эффективным способом (это связано со многими системными вызовами). Например, чтобы отслеживать использование памяти каждую секунду для 50 процессов, я должен каждую секунду открывать, считывать и закрывать 50 файлов (то есть 150 системных вызовов) каждую секунду из/proc. Не говоря уже о разборе при чтении этих файлов.Мониторинг программных ресурсов для каждого процесса в Linux
Другой проблемой является потребление пропускной способности сети: это невозможно легко вычислить для каждого процесса, который я хочу контролировать. По моему мнению, решение, принятое NetHogs, связано с довольно высокими накладными расходами: он захватывает и анализирует каждый пакет с использованием libpcap, затем для каждого пакета определяется локальный порт и ищет в/proc, чтобы найти соответствующий процесс.
Знаете ли вы, есть ли более эффективные альтернативы представленным методам или какие-либо библиотеки, которые справляются с этими проблемами?
taskstats содержит только диск ввода-вывода, а не как чистую, так и дисков – tuxx
Исправление: taskstats контролирует только чтение/запись системных вызовов, а не recv/send и друзей (но это могут быть легко модифицированы внутри ядра). Спасибо, в любом случае. Пока это лучшее решение. – tuxx