首先确定要记录哪些 CPU 统计信息

首先确定要记录哪些 CPU 统计信息

伙计们!

我想连续检查我的 CPU 日志。我使用了 top 和 htop 命令。但我只是在模拟期间检查它们。

现在我想运行一个真正的机器人大约 2 个小时(我的笔记本电脑在移动时会在机器人上)。

那么我如何将所有记录保存在日志文件中以便以后访问呢?

其次,我还检查了 GPU(AMD 显卡)的性能。但是我该如何创建日志文件呢?

答案1

首先确定要记录哪些 CPU 统计信息

您可以选择记录不同的统计数据:

  • CPU 速度(频率以 Mhz 或 Ghz 为单位)
  • CPU 使用率百分比
  • CPU 温度
  • CPU 平均负载率
  • 此外,这些统计数据可针对每个 CPU 进行细分,即四核超线程 CPU 的 #1 到 #8。

为了简单起见,我将使用类似于以下答案的平均负载因子来得出这个答案:如何记录 CPU 负载?

创建两小时循环,每秒记录一次

你需要一个 bash 脚本来循环 7,200 秒(2 小时),它看起来像这样:

#!/bin/bash

for ((i=0; i<7200; i++))
do
    uptime >> /home/user/cpuload.log
    sleep 1
done

解析电子表格中的数据

要查看输出,请使用以下命令:

$ cat cpuload.log
 20:04:06 up 2 days, 14 min,  1 user,  load average: 1.39, 1.12, 0.95

平均负载报告三个变量——最后一分钟、最后五分钟和最后十五分钟。为简单起见,仅考虑最后一分钟的平均负载,它在我们的循环中每秒报告一次。

您可以将文件导入cpuload.log电子表格并绘制两小时内的数据点图表,或者直接滚动浏览数据。我使用 Libre Office Calc,但所有现代电子表格都可以导入该文件。

关于平均负载的简要说明

在上面的例子中,一分钟的平均负载为1.39。这看起来很危险,因为任何超过的值.70都值得调查,并且1.00意味着存在瓶颈,进程没有得到服务并且必须等待。

但是,在电子表格中,您必须将平均负载除以您拥有的 CPU 数量。要快速找出答案,请使用以下命令:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
2074968
2133093
2094750
1863843
1728562
1855875
1849125
1778156

这表明有 8 个 CPU(这是四核超线程 Intel i-7 3630QM 笔记本电脑 CPU,运行频率为 1200 Mhz 至 3400 Mhz)。在此快照中,CPU#1(内部称为 CPU0)的运行速度为,2,0749.68 Mhz而 CPU#8 的运行速度为1,7781.56 Mhz。但我离题了,重要的是计算有多少个 CPU,即 8 个。

因此,将平均负载1.39除以 8,即可得到真正的平均负载,0.17这是非常可观的。再次重申,任何超过这个值的值0.70都值得调查,当它达到时,1.00您的系统就会停滞。您可以进一步阅读这里


使用top命令查看前 10 个进程

要使用该top命令查看耗费资源最多的 10 个进程,请使用此命令代替以下命令uptime

top -n 1 -b | head -n 17 | tail -n 10 >> /home/user/top10.log

该文件/home/user/top10.log看起来会像这样(每秒重复一次,持续两小时):

$ top -n 1 -b | head -n 17 | tail -n 10
 6170 rick      20   0 1437432 537000 126060 S  62.5  6.7   8:50.24 chrome
 2466 rick      20   0 1210040 140568  61864 S   6.2  1.8  22:16.88 compiz
 4111 rick      20   0  742396 248724 185820 S   6.2  3.1  36:26.68 chrome
 6280 rick      20   0   41800   3668   3124 R   6.2  0.0   0:00.01 top
10096 root      20   0       0      0      0 S   6.2  0.0   0:00.47 kworker/0:2
    1 root      20   0  120064   6244   4000 S   0.0  0.1   0:02.23 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.05 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:01.31 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
    7 root      20   0       0      0      0 S   0.0  0.0   1:39.28 rcu_sched

笔记:替换user为您的实际用户名。


使用top命令获取我们西IDCPU 值

与第一部分类似,创建一个 bash 脚本来循环 7,200 秒:

#!/bin/bash

# NAME: ~/bin/cpu-top-summary
# DATE: June 13, 2017
# DESC: Call `top` command every second to obtain CPU(s) stats for
#       us, sy, ni, id, wa, hi, si, and st. Log to /tmp/top-cpu-summary.log
#       with time stamp in hh:mm:ss 24 hour format.
# PARM: $1 number of seconds to run, ie 2 hours = 7200

now="$(date +'%d/%m/%Y')"
printf "top CPU(s) summary for %s\n" "$now" > /tmp/top-cpu-summary.log
for ((i=0; i<$1; i++))
do
    TimeStamp=`date +"%H:%M:%S"`
    printf "$TimeStamp - " >> /tmp/top-cpu-summary.log
    top -n 1 -b | head -n 3 | tail -n 1 >> /tmp/top-cpu-summary.log
    sleep 1
done

当您使用以下命令调用 bash 脚本时,top-cpu-summary 10您可以使用以下命令查看 10 秒的输出:

$ cat /tmp/top*
top CPU(s) summary for 13/06/2017
19:17:34 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:35 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:36 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:37 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:38 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:39 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:41 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:42 - %Cpu(s): 24.9 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:43 - %Cpu(s): 24.9 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:44 - %Cpu(s): 24.9 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st

答案2

您不需要自己编写脚本,而是可以使用收集也许可以将其与石墨格拉法纳使结果可视化。

来自 collectl 网站:

很多时候,你都会需要性能数据。这些情况包括基准测试、监控系统的总体健康状况或尝试确定系统在过去某个时间点正在做什么。根据你正在做的事情,你通常会使用不同的工具,每个工具都是针对特定情况而设计的。

与大多数监控工具不同,这些工具要么专注于一小部分统计数据,要么只以一种方式格式化输出,要么以交互方式运行,要么作为守护进程运行,但不能同时运行两者,而 collectl 则试图做到这一切。您可以选择监控目前包括 buddyinfo、cpu、磁盘、inodes、infiniband、lustre、内存、网络、nfs、进程、二次曲面、slabs、套接字和 tcp 在内的多种子系统。

Collectl 输出还可以保存在滚动日志集中以供以后回放或以各种格式交互显示。如果这些还不够,还有插件允许您以其他格式报告数据,甚至通过套接字将它们发送到远程工具(如 ganglia 或 graphite)。您甚至可以创建空格分隔格式的文件,以便使用外部软件包(如 gnuplot)进行绘图。

相关内容