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