我需要计算给定服务器上多个进程的cpu使用情况。 几个选项如下所示
a)虽然我们可以使用 ps 来查找进程的cpu使用情况,但ps给出了进程在其生命周期内的cpu使用情况,而不是即时。当然,当我的意思是即时我意味着一些小的特定时期,比如大约1秒左右,因为在任何给定的时刻cpu都是由进程使用的。
b)vmstat不显示进程明智的cpu使用情况。
c)我们可以使用top来查找进程的cpu使用情况。
top -b -n 2 -d 1 | grep'mysqld'|尾巴-n 1
对于n = 1,top命令的行为更像ps,其中自启动后提供进程的cpu使用,因此使用n = 2并忽略第一行的尾部将在该时刻给出cpu使用。
但忽略前几行不适用于多个grep字符串(进程名称),并且进程中的位置可能并不总是出现在顶部,因为它们会继续更改其状态。
top -b -n 2 -d 1 | grep'mysqld \ | apache'|尾巴-n 1
因此,为多个进程执行此操作的一种方法是维护映射类型的结构,然后仅采用那些仅在第二次出现的进程的CPU使用情况。但不确定这是否有效。每次都做一个顶部对于一个特定的过程来说效率不够明显我认为或者它与一个顶部有多个进程的grep相同。
4)由于top内部使用/ proc / stats信息,我们可以自己明确地实现这个逻辑。
How to calculate the CPU usage of a process by PID in Linux from C?
哪一个可能是更好的选择?
答案 0 :(得分:0)
您应该使用已经发现的/proc
来执行此操作。或者如果您选择的语言提供一个,可能使用一些更高级别的库。解析ps
和top
的输出并没有赢得任何东西。您需要的数据都在/proc
,您只需要小心检查每个进程的身份,以防PID在您收集数据时被回收(在大多数系统上PID回收已经赢得了&t; t发生在几秒钟内,所以它是可行的。)