如何衡量CPU使用率

我想以1秒的频率loggingCPU使用情况。

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

问题是每个输出之间的时间并不总是恰好一秒,特别是在繁忙的服务器上。 我希望能够每秒输出时间戳和CPU使用率。 什么是简单的方法来实现这一点,而不需要安装专门的工具?

使用Linux系统上通常可用的着名UNIX工具:

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

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

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

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

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

为了完整性,使用管道来做到这一点的另一种方法是:

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

有很多方法可以做到这一点。 除了最上面的另一种方式是你的“萨尔”实用程序。 所以像

 sar -u 1 10 

每1秒钟会给你10次的CPU利用率。 最后,它将打印每个sys,user,iowait,idle的平均值

另一个实用程序是“mpstat”,它给你类似的东西与萨尔

你可能想尝试htop和atop 。 htop atop收集信息的同时atop交互性非常好,甚至可以报告终止进程的CPU使用情况。

我发现一个简单的方法来获取时间戳信息与vmstat的输出一起显示。

示例命令:
vmstat -n 1 3 | 同时读线; 做echo“$(date –iso-8601 = seconds)$ line”; DONE

输出:
proc ———– memory ———- — swap– —– io —- 2013-09-13T14:01:31-0700 –system– —- cpu —-
2013-09-13T14:01:31-0700 rb 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

为了监控磁盘使用情况,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