#csv #cpu-memory #data-file #collect #graph #system-info #information

app system_info_collector

一个简单快速的应用程序,用于收集操作系统信息并创建基于它的图表

5 个版本 (3 个破坏性更新)

0.5.1 2023年8月10日
0.5.0 2023年7月23日
0.4.0 2023年7月23日
0.3.0 2023年7月14日
0.1.0 2023年7月8日

机器学习 类别中排名 163

每月下载量 32

MIT 许可证 MIT

57KB
1K SLoC

系统信息收集器

这是一个简单的应用程序,用于收集系统 CPU 和内存使用情况随时间变化的数据。

将结果收集到 csv 文件后,可以使用绘图创建 html 文件。

Screenshot

为什么?

我需要一个简单快速的应用程序来收集有关慢速(4x1Ghz)32 位 ARM 计算机上的 RAM 使用量和 CPU 消耗量等基本信息,该计算机使用基于 Yocto 定制的 Linux OS 构建。

我查看了一些像 grafana 这样的应用程序,但它们太重了,或者工作在客户端/服务器架构中,在这种情况下,我更愿意避免。

如何使用它?

这是一个控制台应用程序,这意味着您需要使用终端来使用它。

./system_info_collector -l debug -a collect-and-convert -o

每秒打印一次关于刷新的 CPU 和内存使用的调试信息。

过了一会儿,您可以点击 Ctrl+C 一次来停止收集数据,并等待自动准备和打开准备好的 html 图表数据。

https://github.com/qarmin/system-info-collector/assets/41945903/7ac510b5-babf-4d04-9624-34d83b8f1866

性能和内存使用

在 i7-4770 上进行测试时,应用程序使用了稳定的 15-20MB 内存,大多数时间 CPU 使用率低于 0.1%。

我使用的 sys-info 库在查找进程的 CPU/ram 使用率时具有相当大的开销(通常为几个毫秒),因为它打开了不必要的文件。因此,我计划手动进行一些计算。所以如果您想尽可能少地使用资源,您应该只收集基本操作系统信息,而不包括任何进程(这是默认模式)。

在收集模式下,应用程序只需要读取 CPU/ram 使用情况,然后将其保存到文件中,这就是为什么它使用如此少的资源。

将 csv 文件转换为 html 文件需要更多的资源,因此应该在更强大的计算机上完成。

在i7-4770上测试的内存、CPU总使用率和每个核心使用率结果 - 以1秒间隔,收集这么多样本应该需要大约3天(我使用了更小的间隔来模拟实际使用)

csv文件的前几行示例

INTERVAL_SECONDS=1,CPU_CORE_COUNT=8,MEMORY_TOTAL=23943.89,SWAP_TOTAL=2048.00,UNIX_TIMESTAMP_START_TIME=1690142980.2999594,APP_VERSION=0.4.0,CUSTOM_0=FIREFOX
SECONDS_SINCE_START,MEMORY_USED,SWAP_USED,CPU_USAGE_TOTAL,CUSTOM_0_CPU,CUSTOM_0_MEMORY
0.24,11031.20,0.00,49.66,0.00,1111.25
1.24,11037.60,0.00,16.75,2.11,1111.25
2.24,11039.49,0.00,19.14,3.55,1110.93
3.24,11040.23,0.00,13.27,2.17,1110.93
4.24,11047.52,0.00,16.32,4.65,1111.61
  • CSV文件大小:19.55 MiB
  • 加载和解析CSV文件:407 ms
  • HTML文件大小:129 MiB(新版本使用简单的正则表达式最小化器,所以大小应该小约30%)
  • 创建HTML文件:1.68 s

示例命令

以1秒间隔收集使用内存和CPU使用率,并将其保存到system_data.csv文件中

./system_info_collector

收集并转换CSV数据,自动在浏览器中打开HTML文件,此外还将显示更多详细的日志

./system_info_collector -l debug -a collect-and-convert -o

将CSV数据文件转换为HTML文档(包含图表)并在浏览器中打开

./system_info_collector -a convert -d /home/user/data.csv -p /home/user/plot.html -o

以0.2秒的间隔收集所有基本数据

./system_info_collector -l debug -a collect-and-convert -o -m memory-used -m memory-free -m memory-available -m cpu-usage-total -m cpu-usage-per-core -c 0.2

收集所选进程的内存和CPU使用率 - 将尝试找到命令名称中包含firefox的进程 - FIREFOX名称将在后续的图表中使用。

应用程序一次只能跟踪具有特定名称的1个进程,所以如果有两个或更多进程名称中包含firefox,则只会收集第一个的信息

./system_info_collector -e "FIREFOX|firefox" -e "Event Handler|/usr/bin/event_handler --timeout"

显示有关可用参数的帮助信息

./system_info_collector --help

在操作系统启动时运行应用程序(Linux)

从启动开始收集操作系统数据的一种简单方法是创建简单的systemd服务。

为此,将应用程序复制到/usr/bin文件夹中,并创建用于收集数据的文件夹

sudo cp system_info_collector /usr/bin/system_info_collector
sudo mkdir -p /opt/system_info_collector/ # To collect reports

创建服务内容

sudo touch /etc/systemd/system/system-info-collector.service
sudo gedit /etc/systemd/system/system-info-collector.service # open it with any text editor - I used gedit

粘贴此代码并修改参数

[Unit]
Description=System Data Collector

[Service]
ExecStart=/usr/bin/system_info_collector -d /opt/system_info_collector/data.csv

[Install]
WantedBy=default.target

现在启动服务

sudo systemctl daemon-reload
sudo systemctl start system-info-collector
sudo systemctl status system-info-collector # This should print "active (running)" if everything works fine, if there is failure, check log to see what happened
sudo systemctl enable system-info-collector # To enable running service when OS starts

现在您可以使用简单命令转换收集的数据

system_info_collector -a convert -d /opt/system_info_collector/data.csv -p /tmp/plot.html -o

CPU/内存/交换结果

CPU使用率显示在0到100%的范围内,如果计算机有多个核心,则CPU使用率将除以核心数,以获得适当的值。

内存和交换使用率以MiB显示,范围为0到总内存/交换大小。

当检查进程时,如果找不到搜索的进程,则在CPU/内存图中都可见-1。

数据文件兼容性

应用程序不同版本之间的兼容性无法保证,因此如果您想从CSV文件创建图表,请确保使用相同版本的应用程序(CSV文件包含应用程序使用的版本信息)。

通常,可以通过手动添加/删除CSV文件中的记录来轻松解决不兼容性问题。

操作系统支持

目前,完全支持的是Linux,因为使用手动读取/proc文件(性能原因)。

应用程序也应该在Mac上完全工作,但在Windows上捕获进程的CPU/内存使用率不受支持(除了这一点,一切应该工作正常)。

许可

MIT许可

版权(c)2023 Rafał Mikrut及贡献者

依赖项

~18-29MB
~375K SLoC