我想知道是否有一种有效的解决方案来监控Linux中的进程资源消耗(CPU,内存,网络带宽)。我想在C++中编写一个守护进程,为一些给定的PID执行此监视。据我所知,经典的解决方案是定期读取/ proc中的信息,但这似乎并不是最有效的方式(它涉及很多系统调用)。例如,要监视50个进程每秒的内存使用情况,我必须每秒从/ proc打开,读取和关闭50个文件(即150个系统调用)。更不用说在阅读这些文件时涉及的解析。Linux中每个进程的编程资源监控
另一个问题是网络带宽消耗:对于我想要监视的每个进程,这不能轻松计算出来。 NetHogs采用的解决方案涉及到相当高的开销,我认为它使用libpcap捕获和分析每个数据包,然后为每个数据包确定本地端口并在/ proc中搜索以查找相应的进程。
你知道是否有更有效率的替代方法提出这些方法或任何库处理这个问题?
taskstats只包含磁盘I/O,不包括网络和磁盘 – tuxx 2009-11-03 20:27:05
纠正:taskstats只监视读/写系统调用,而不是recv/send和朋友(但是这个可以在内核中轻松修改)。不管怎么说,还是要谢谢你。这似乎是迄今为止最好的解决方案。 – tuxx 2009-11-04 17:40:22