如何衡量CPU使用率

时间:2011-10-26 21:09:30

标签: linux bash

我想以1秒的频率记录CPU使用情况。

一种可能的方法是通过vmstat 1命令。

问题是每个输出之间的时间并不总是一秒钟,特别是在繁忙的服务器上。我希望能够每秒输出时间戳和CPU使用率。在没有安装特殊工具的情况下,实现这一目标的简单方法是什么?

5 个答案:

答案 0 :(得分:4)

有很多方法可以做到这一点。除了另一种方式,对你来说," sar"效用。像

这样的东西
sar -u 1 10

每1秒为你提供10次cpu利用率。最后,它将打印每个sys,user,iowait,idle

的平均值

另一个实用程序是" mpstat",它为你提供与sar类似的东西

答案 1 :(得分:3)

使用Linux系统上通常可用的众所周知的UNIX工具top

    top -b -d 1 > /tmp/top.log

top的每个输出块的第一行包含时间戳。

我看不到命令​​行选项来限制top显示的行数。

部分 5a。 SYSTEM配置文件 5b。 top手册页的个人配置文件描述了在交互模式下运行W时按top以创建$HOME/.toprc配置文件。

我这样做了,然后编辑了我的.toprc文件并更改了所有maxtasks值,使它们为maxtasks=4。然后top只显示4行输出。

为了完整起见,使用管道执行此操作的替代方法是:

    top -b -d 1 | awk '/load average/ {n=10} {if (n-- > 0) {print}}' > /tmp/top.log

答案 2 :(得分:1)

您可能想尝试htopatophtop具有良好的交互性,而atop可收集信息,甚至可以报告终止进程的CPU使用情况。

答案 3 :(得分:0)

我找到了一种简洁的方法来获取时间戳信息以及vmstat的输出。

示例命令:
vmstat -n 1 3 |读线;回声“$(date --iso-8601 = seconds)$ line”;完成

输出:
2013-09-13T14:01:31-0700 procs ----------- memory ---------- --- swap-- ----- io ---- --system-- ---- cpu ----
2013-09-13T14:01:31-0700 r b swpd free buff cache si so bi bo in cs us sy id wa
2013-09-13T14:01:31-0700 1 1 4197640 29952 124584 12477708 12 5 449 147 2 0 7 4 82 7
2013-09-13T14:01:32-0700 3 0 4197780 28232 124504 12480324 392 180 15984 180 1792 1301 31 15 38 16
2013-09-13T14:01:33-0700 0 1 4197656 30464 124504 12477492 344 0 2008 0 1892 1929 32 14 43 10

答案 4 :(得分:0)

要监视磁盘使用情况,cpu和load,我创建了一个小的bash脚本,每隔10秒就会将值写入一个日志文件。

此日志文件由logstash kibana和riemann处理。

# #!/usr/bin/env bash

# Define a timestamp function
LOGPATH="/var/log/systemstatus.log"



timestamp() {
  date +"%Y-%m-%dT%T.%N"
}

#server load
while ( sleep 10 ) ; do
echo -n "$(timestamp) linux::systemstatus::load " >> $LOGPATH
cat /proc/loadavg >> $LOGPATH

#cpu usage
echo -n "$(timestamp) linux::systemstatus::cpu " >> $LOGPATH
top -bn 1 | sed -n 3p >> $LOGPAT


#disk usage
echo -n "$(timestamp) linux::systemstatus::storage " >> $LOGPATH
df --total|grep total|sed "s/total//g"| sed 's/^ *//' >> $LOGPATH



done