我正在针对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脚本中收集它?
答案 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 文件。