伙计们!
我想连续检查我的 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
命令获取我们,西,ID和锡CPU 值
与第一部分类似,创建一个 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)进行绘图。