在shell脚本中获取CPU使用率?
我正在针对Java进程运行一些JMeter测试,以确定Web应用程序在负载下(500多个用户)的响应速度。 JMeter将为每个Web请求提供响应时间,并且我编写了一个脚本,每隔X秒对Tomcat管理器执行ping操作,这将使我获得JVM堆的当前大小。
我想收集Tomcat正在使用的CPU百分比的服务器上的统计信息。我试图使用ps
在shell脚本中执行以下操作:
PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`
...每隔X秒运行一次命令,然后将结果添加到文本文件中。 (对于任何想知道的人," pmem" =%mem的使用率,nlwp
是线程数)
但是,我发现这给出了" CPU使用率百分比"的不同定义,这与我根据ps的手册所希望的不同,pcpu
定义为:
cpu utilization of the process in "##.#" format. It is the CPU time used divided by the time the process has been running (cputime/realtime ratio), expressed as a percentage.
换句话说," pcpu"为我提供了在整个生命周期内该进程的CPU利用率百分比。
因为我想每隔X秒取样一次,所以我想收集当前时间该进程的CPU利用率,仅类似于top给我的样子。
(自上次更新以来该进程的CPU利用率)。
如何从Shell脚本中收集此信息?
解决方案
回答
使用" top -b"(和其他开关,如果需要不同的输出)。它只会转储到stdout,而不是跳到curses窗口中。
回答
我不由自主地使用系统状态的/ proc文件系统视图查看man 5 proc来查看/ proc / PID / stat的条目格式,其中包含CPU使用率信息,并使用/ proc / stat获取全局系统信息。要获得"当前时间"的使用率,我们可能真的是说"最近N秒内使用的CPU"。在相距不远的地方进行两个采样,以了解当前的CPU消耗率。然后,我们可以将这些值变成有用的东西。确实,这可能比纯shell脚本更像是Perl / Ruby / Python作业。
我们可以使用/ proc / PID / status来获取所需的粗略数据,这将为该进程提供睡眠平均值。相当粗略的数据。
回答
我发现用于在执行诸如JMeter之类的测试时监视服务器的最有用的工具是dstat。它不仅为我们提供了服务器的一系列统计信息,而且还可以输出到csv以便轻松导入电子表格,还可以使用Python编写的模块扩展该工具。