如何测量CPU使用率

4
我想每秒记录一次CPU使用率。
一个可能的方法是通过vmstat 1命令来实现。
问题在于每个输出之间的时间并不总是完全一秒钟,特别是在繁忙的服务器上。我希望能够每秒输出时间戳和CPU使用率。有什么简单的方法可以实现这一点,而不需要安装特殊的工具?

你能否使用通常在Linux系统上可用的著名UNIX工具toptop -b -d 1 > /tmp/top.log。每个top输出列表的第一行都包含一个时间戳。 - Simon C
你应该将它发布为一个答案。是否有选项可以将输出限制为前几行,以便不显示进程列表,最好不通过管道? - dabest1
5个回答

5

有多种方法可以做到这一点。除了顶部,另一种方法是使用"sar"实用程序。所以可以这样做:

sar -u 1 10

该命令将每秒运行10次,给出CPU利用率。最后将输出系统、用户、iowait和空闲时间的平均值。

另一个实用程序是"mpstat",它与sar提供了类似的功能。


4

使用广为人知的UNIX工具top,通常可在Linux系统上使用:

    top -b -d 1 > /tmp/top.log
top的每个输出块的第一行都包含一个时间戳。
我没有找到任何命令行选项来限制top显示的行数。 top man页面的5a.系统配置文件和5b.个人配置文件部分描述了在交互模式下运行top时按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

谢谢。top -p 1 -b -d 1 | awk '/^top/ {n=2} !/Tasks/ {if (n-- > 0) {print}}' 看起来很好地限制了输出内容,只显示我所需的部分。现在我有一个后续问题:从 top 命令输出中合并和处理两行 - dabest1

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

0
为了监控磁盘使用率、CPU和负载,我创建了一个小的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

0

我找到了一种巧妙的方法,可以在vmstat输出中显示时间戳信息。

示例命令:
vmstat -n 1 3 | while read line; do echo "$(date --iso-8601=seconds) $line"; done

输出:
2013-09-13T14:01:31-0700 进程 -----------内存----------- ---交换--- ----I/O---- --系统-- ----CPU----
2013-09-13T14:01:31-0700 运行 阻塞 虚拟内存 空闲内存 缓存 内存 页内存交换磁盘空间 读I/O操作 写I/O操作 中断次数 上下文切换次数 用户态时间 系统态时间 空闲态时间 等待态时间
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接