我试图用C/C++编写一个程序,使其表现像Linux中的top命令。
我已经进行了一些研究,并且已经知道如何计算进程的CPU使用率。我们可以通过在当前时间和几秒钟后从/proc/[PID]/stat计算stime + utime来获得CPU使用率。然后计算stime + utime差异,并将结果与正常运行时间差异相除,得出CPU使用率百分比。在单进程/多线程进程上将如此简单。
问题是在像httpd这样的情况下,它可以作为多进程使用。当网络服务器繁忙时,httpd将派生子进程来处理一堆请求。然后,我计算总进程数,比如说500。我想计算这些进程的CPU使用率,但是将它们汇总一下,所以我只看到1个httpd CPU使用率。但是,如果我像上面提到的那样执行算法,则当几秒钟后进程数减少到
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
如果您看上面的示例,则Stime + Utime的增量将产生负值,因为进程数减少了,并在几毫秒后给出了较低的值。我只想知道,还有其他方法可以计算出这种过程的行为吗?谢谢你。
最佳答案
我建议分别保存每个过程的数据。
当您有一个新的样本时,每个过程可能属于以下三种类别之一:
1.之前和之后都存在-从新值中减去旧值。
2.现在存在,但不存在-只需采用新值即可。
3.以前存在,但现在不存在-忽略它。您在这里遗漏了一些东西,因为它可能在90%的采样期间内使用了CPU,但我希望您不需要完美的精度。
它使您可以在样本之间保留更多数据,并且需要使用更复杂的数据结构,但它应该给出合理的结果。
关于c++ - 如何在Linux中计算多进程应用程序的CPU使用率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8815950/