我想知道是否有一种有效的解决方案来监控 Linux 中的进程资源消耗(cpu、内存、网络带宽)。我想用 C++ 编写一个守护进程,对某些给定的 PID 进行监视。据我所知,经典的解决方案是定期从 /proc 读取信息,但这似乎不是最有效的方法(它涉及许多系统调用)。例如,要每秒监控 50 个进程的内存使用情况,我必须每秒从 /proc 打开、读取和关闭 50 个文件(这意味着 150 个系统调用)。更不用说读取这些文件时所涉及的解析。
另一个问题是网络带宽消耗:对于我要监视的每个进程,这不能轻易计算。在我看来,NetHogs 采用的解决方案涉及相当高的开销:它使用 libpcap 捕获和分析每个数据包,然后为每个数据包确定本地端口并在 /proc 中搜索以找到相应的进程。
您是否知道这些方法是否有更有效的替代方案或任何处理此问题的库?