我想以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