【问题标题】:How to measure CPU usage如何测量 CPU 使用率
【发布时间】:2011-10-26 21:09:30
【问题描述】:

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

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

问题是每次输出之间的时间并不总是一秒,尤其是在繁忙的服务器上。我希望能够每秒输出时间戳以及 CPU 使用率。在不安装特殊工具的情况下,有什么简单的方法可以做到这一点?

【问题讨论】:

  • 您能否使用 Linux 系统上通常可用的著名 UNIX 工具 toptop -b -d 1 > /tmp/top.log top 的每个输出列表的第一行包含一个时间戳。
  • 您应该将其发布为答案。是否可以选择将输出限制为前几行,因此不显示进程列表,最好不要通过管道?

标签: linux bash


【解决方案1】:

有很多方法可以做到这一点。除了顶部,另一种方式是“sar”实用程序。所以像

sar -u 1 10

将每 1 秒为您提供 10 次的 cpu 利用率。最后,它将打印 sys、user、iowait、idle 中每一个的平均值

另一个实用程序是“mpstat”,它可以为您提供与 sar 类似的功能

【讨论】:

    【解决方案2】:

    使用 Linux 系统上通常可用的知名 UNIX 工具 top

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

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

    我没有看到用于限制 top 显示的行数的命令行选项。

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

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

    为了完整起见,使用管道的另一种方法是:

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

    【讨论】:

    【解决方案3】:

    您可能想试试htopatophtop 具有精美的交互性,而 atop 收集信息并可以报告 CPU 使用情况,即使是已终止的进程。

    【讨论】:

      【解决方案4】:

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

      示例命令:
      vmstat -n 1 3 |而读线;做 echo "$(date --iso-8601=seconds) $line";完成

      输出:
      2013-09-13T14:01:31-0700 procs -----------内存--------- ---交换--- -----io---- --system-- ----cpu----
      2013-09-13T14:01:31-0700 r b swpd 免费 buff 缓存 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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2021-12-17
          • 1970-01-01
          • 2015-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多