我想以1秒的频率记录CPU使用情况。
一种可能的方法是通过vmstat 1
命令。
问题是每个输出之间的时间并不总是一秒钟,特别是在繁忙的服务器上。我希望能够每秒输出时间戳和CPU使用率。在没有安装特殊工具的情况下,实现这一目标的简单方法是什么?
答案 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)
答案 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