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