在shell脚本中获取CPU使用率?

时间:2008-09-08 18:05:34

标签: linux shell scripting

我正在针对Java进程运行一些JMeter测试,以确定Web应用程序在负载下的响应速度(500多个用户)。 JMeter将为每个Web请求提供响应时间,并且我已经编写了一个脚本来每隔X秒ping Tomcat Manager,这将获得JVM堆的当前大小。

我想在服务器上收集Tomcat使用的CPU百分比的统计信息。我尝试在使用ps的shell脚本中执行此操作:

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`

...每隔X秒运行一次命令,并将结果追加到文本文件中。 (对于任何想知道的人,pmem =%mem使用率和nlwp是线程数)

但是我发现这给出了“CPU利用率百分比”的不同定义 - 根据ps的联机帮助页,pcpu被定义为:

  

“##。#”格式的进程的CPU利用率。它是使用的CPU时间除以进程运行的时间(cputime / realtime ratio),以百分比表示。

换句话说,pcpu为我提供了流程生命周期流程的%CPU利用率。

由于我想每X秒采样一次,我只想在当前时间收集进程的CPU利用率 - 类似于top给我的 (自上次更新以来进程的CPU利用率)。

如何从shell脚本中收集它?

6 个答案:

答案 0 :(得分:13)

如果您想要不同的输出,请使用top -b(以及其他开关)。它只会转储到stdout而不是跳进curses窗口。

答案 1 :(得分:5)

我发现在监视服务器时执行JMeter等测试的最有用的工具是dstat。它不仅为您提供服务器的一系列统计数据,还输出到csv以便于导入电子表格,并允许您使用Python编写的模块扩展该工具。

答案 2 :(得分:4)

用户加载:top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//' 系统负载:top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//' 空闲负载:top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

每个结果都是一个小数。

答案 3 :(得分:2)

在我的脑海中,我将使用系统状态的/ proc文件系统视图 - 查看 man 5 proc 以查看/ proc / PID / stat条目的格式,其中包含总CPU使用率信息,并使用/ proc / stat获取全局系统信息。要获得“当前时间”用法,您可能真的是指“在最后N秒内使用的CPU”;将两个样本隔开一小段距离,以查看当前的CPU消耗率。然后,您可以将这些值变为有用的东西。实际上,这可能是一个Perl / Ruby / Python作业而不是纯shell脚本。

您可以使用/ proc / PID / status获取您之后的粗略数据,从而为该过程提供睡眠平均值。虽然很粗糙的数据。

答案 4 :(得分:0)

也使用1作为迭代计数,因此您将获得当前快照,而无需等待在延迟时间内获得另一个快照。

top -b -n 1

答案 5 :(得分:0)

这不会为您提供每个进程的指标,但 Stress Terminal UI 非常有用,可以了解您对箱子的惩罚程度。添加 -c 标志以使其将数据转储到 CSV 文件。

enter image description here