在我的java程序中,我使用Jsch连接到远程服务器,现在我需要获得该服务器的Cpu利用率。我使用iostat -c
命令获取CPU详细信息...;我得到的详细信息如下:
Linux 3.1.0-1.2-desktop (ccitsuse06) 10/05/2015 _i686_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.03 0.00 0.00 99.91
我实际上需要总average CPU load
;如何使用命令获得相同的功能?是否有任何简单的单一命令可以实时提供总平均Cpu ...或者我是否需要解析这些数据的结果?再次;什么因素有助于总平均cpu,以便我可以计算。我之前读过类似的问题,但没有一个能够解决我的疑问。
*请注意,这是我的程序所需的当前/实时平均CPU负载,我希望命令尽可能准确,快速地执行..
我一直在阅读awk,egrep等的用法,但我仍然不知道如何在命令中使用它来实现我想要的结果!
答案 0 :(得分:0)
尝试
mpstat -u | grep -A 1 '%idle' | tail -1 | sed -r 's/ +/ /g' | cut -d' ' -f12
如果你想了解它在做什么,你应该尝试一点一点地执行它(从第一部分开始,然后添加grep
部分等)。
使用mpstat
获取所有统计信息;然后使用grep
获取相关的行;使用tail
删除标题行;使用sed
压缩多余的空格;然后使用cut
获取第12列。
这将为您提供空闲读数,作为100之外的值。要将此值转换为CPU使用率的百分比数字,您需要从100减去此值。
答案 1 :(得分:0)
要获得一段时间内的平均CPU负载,您需要查看该时段开始和结束时使用的CPU。您可以对具有每个逻辑CPU使用的时间量的/proc/stat进行采样,或者您需要运行实用程序一段时间来进行采样。
e.g。
head -1 /proc/stat
打印
cpu 170661 1384 22478 7836920 3244 0 2645 0 0 0
从文档中,这是
cpu 3357 0 4313 1362393
The amount of time, measured in units of USER_HZ
(1/100ths of a second on most architectures, use
sysconf(_SC_CLK_TCK) to obtain the right value), that
the system spent in various states:
user (1) Time spent in user mode.
nice (2) Time spent in user mode with low priority
(nice).
system (3) Time spent in system mode.
idle (4) Time spent in the idle task. This value
should be USER_HZ times the second entry in the
/proc/uptime pseudo-file.
iowait (since Linux 2.5.41)
(5) Time waiting for I/O to complete.
irq (since Linux 2.6.0-test4)
(6) Time servicing interrupts.
softirq (since Linux 2.6.0-test4)
(7) Time servicing softirqs.
steal (since Linux 2.6.11)
(8) Stolen time, which is the time spent in
other operating systems when running in a
virtualized environment
guest (since Linux 2.6.24)
(9) Time spent running a virtual CPU for guest
operating systems under the control of the Linux
kernel.
guest_nice (since Linux 2.6.33)
(10) Time spent running a niced guest (virtual
CPU for guest operating systems under the
control of the Linux kernel).
如果您在任意两个样本之间取这些值的差异,则可以占用繁忙时间的百分比。