Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux中计算多进程cpu使用率的有效方法_Linux_Performance_Process_Cpu Usage_Top Command - Fatal编程技术网

linux中计算多进程cpu使用率的有效方法

linux中计算多进程cpu使用率的有效方法,linux,performance,process,cpu-usage,top-command,Linux,Performance,Process,Cpu Usage,Top Command,我需要计算给定服务器上多个进程的cpu使用率。 下面是几个选项 a) 虽然我们可以使用ps来查找进程的cpu使用率,但ps给出的是进程在其生命周期内的cpu使用率,而不是瞬间。当然,当我指瞬间时,我指的是一些小的特定周期,比如1秒左右,因为在任何给定的时刻,cpu是否被进程使用 b) vmstat不显示进程cpu使用情况 c) 我们可以使用top来查找进程的cpu使用情况 top-b-n2-d1 | grep'mysqld'| tail-n1 对于n=1,top命令的行为更像ps,其中给出了自引

我需要计算给定服务器上多个进程的cpu使用率。 下面是几个选项

a) 虽然我们可以使用ps来查找进程的cpu使用率,但ps给出的是进程在其生命周期内的cpu使用率,而不是瞬间。当然,当我指瞬间时,我指的是一些小的特定周期,比如1秒左右,因为在任何给定的时刻,cpu是否被进程使用

b) vmstat不显示进程cpu使用情况

c) 我们可以使用top来查找进程的cpu使用情况

top-b-n2-d1 | grep'mysqld'| tail-n1

对于n=1,top命令的行为更像ps,其中给出了自引导以来进程的cpu使用率,因此使用n=2并忽略尾部的第一行将给出该时刻的cpu使用率

但是忽略前几行不适用于多个grep字符串(进程名称),进程中的where可能不总是出现在top中,因为它们会不断更改状态

top-b-n2-d1 | grep'mysqld\| apache'| tail-n1

对于多个进程来说,一种方法是维护一个map类型的结构,然后只计算那些只出现第二次的进程的cpu使用率。但不确定这是否有效。我想,每次为一个特定进程创建一个top显然不够有效,还是与一个进程上有多个进程的grep相同单顶

4) 由于top在内部使用/proc/stats信息,我们可以自己显式地实现这个逻辑


哪一个可能是更好的选择?

您应该使用您已经发现的
/proc
进行操作。或者,如果您选择的语言提供了一个更高级别的库,那么也可以使用它。解析
ps
top
的输出不会给您带来任何好处。您需要的数据都在
/proc
中,您只需要小心地检查每个进程的标识,以防在收集数据时PID被回收(在大多数系统上,PID回收不会在几秒钟内发生,因此是可行的).

您应该使用您已经发现的
/proc
进行操作。或者,如果您选择的语言提供了一个更高级别的库,那么也可以使用它。解析
ps
top
的输出不会给您带来任何好处。您需要的数据都在
/proc
中,您只需要小心地检查每个进程的标识,以防在收集数据时PID被回收(在大多数系统上,PID回收不会在几秒钟内发生,因此是可行的).

好的。但是获取所有PID,然后从proc/stats中获取每个PID在2个瞬间的cpu使用率,这难道不需要更多的时间吗?如果我想以秒的粒度推进这些指标。如果我想在linux中实现这一点,哪种语言更好?shell、python或任何其他语言,如C。我认为python将是一个很好的选择,至少是第一个版本。如果以后您需要更高的速度,您可以随时在C.ok中重写其中的一部分。但是获取所有PID,然后从proc/stats中获取每个PID在2个瞬间的cpu使用率,这难道不需要更多时间吗?如果我想以秒的粒度推送这些指标。如果我想在linux中这样做,哪种语言更适合shell、python或任何其他语言,比如C。我认为python将是一个很好的选择,至少对于第一个版本来说是如此。如果你以后需要更快的速度,你可以随时用C语言重写其中的一部分。有人能告诉我为什么要关闭这个程序吗?我想总结一下所有的方法,看看有没有更好的方法。还有一些事情,比如在你没有仔细观察的情况下,使用top会有一个隐藏的问题,我也想包括在内。有时候最好是这样打开你为什么要关闭某些东西。也不要根据你所知道的来判断,因为会有guyz在寻找可能看起来像是基本信息的信息。有人能说一下关闭这个的原因吗。我想总结一下所有的方法,看看是否有更好的方法。同样,当你不敏锐时,使用top这样的方法也会有隐藏的问题观察,我也想包括在内。有时候,最好公开你为什么要关闭某个东西。也不要根据你所知道的来判断,因为会有guyz在寻找可能看起来是基本信息的信息。