我正在运行一些 杰米特 针对 Java 进程进行测试,以确定 Web 应用程序在负载(500 多个用户)下的响应能力。JMeter 将给出每个 Web 请求的响应时间,并且我编写了一个脚本,每隔 X 秒 ping Tomcat 管理器,这将获取 JVM 堆的当前大小。

我想收集服务器上 Tomcat 使用的 CPU 百分比的统计信息。我尝试在 shell 脚本中使用 ps 像这样:

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

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

然而我发现这给出了与我想要的不同的“CPU利用率百分比”的定义 - 根据 ps 的手册页, pcpu 定义为:

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

换句话说, pcpu 给我该进程的 CPU 利用率百分比 寿命 的过程。

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

我如何从 shell 脚本中收集这些信息?

有帮助吗?

解决方案

使用 top -b (如果您想要不同的输出,还有其他开关)。它只会转储到标准输出,而不是跳入诅咒窗口。

其他提示

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

用户负载: 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/.[^.]*$//'

每个结果都是四舍五入的小数。

我突然想到,我会使用系统状态的 /proc 文件系统视图 - 看看 人5过程 查看 /proc/PID/stat 条目的格式,其中包含总 CPU 使用信息,并使用 /proc/stat 获取全局系统信息。要获取“当前时间”的使用情况,您可能真正的意思是“过去 N 秒内使用的 CPU”;取两个相距较近的样本来查看当前的 CPU 消耗率。然后您可以将这些值转化为有用的东西。事实上,这可能更像是 Perl/Ruby/Python 的工作,而不是纯 shell 脚本。

您也许能够通过 /proc/PID/status 获得您想要的粗略数据,它给出了进程的睡眠平均值。不过数据相当粗糙。

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

top -b -n 1
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top