Quiero saber si hay una solución eficiente para supervisar el consumo de recursos de un proceso (CPU, memoria, ancho de banda de red) en Linux. Quiero escribir un daemon en C++ que realice esta monitorización para algunos PID dados. Por lo que sé, la solución clásica es leer periódicamente la información de/proc, pero esta no parece la manera más eficiente (implica muchas llamadas al sistema). Por ejemplo, para monitorear el uso de memoria cada segundo para 50 procesos, tengo que abrir, leer y cerrar 50 archivos (esto significa 150 llamadas al sistema) cada segundo desde/proc. Por no mencionar el análisis involucrado al leer estos archivos.Supervisión de recursos programáticos por proceso en Linux
Otro problema es el consumo de ancho de banda de red: esto no se puede calcular fácilmente para cada proceso que deseo monitorear. La solución adoptada por NetHogs implica una sobrecarga bastante alta en mi opinión: captura y analiza cada paquete usando libpcap, luego, para cada paquete, el puerto local se determina y se busca en/proc para encontrar el proceso correspondiente.
¿Sabes si existen alternativas más eficientes a estos métodos presentados o cualquier biblioteca que se ocupe de estos problemas?
taskstats contiene solo E/S de disco, no tanto en red como en disco – tuxx
Corrección: los estados de cuenta solo leen o escriben syscalls, y no recv/send y amigos (pero esto se puede modificar fácilmente dentro del kernel). Gracias de cualquier manera. Esta parece ser la mejor solución hasta ahora. – tuxx