性能 测试报告
ThingsPanel在Raspberry Pi上的全面性能分析报告
测试结论
ThingsPanel能够在2GB内存的树莓派上稳定运行,适合中小规模IoT应用场景。测试表明系统能够处理每秒约700个数据点的持续写入,足以稳定支持5个设备的100毫秒数据上报,或者20000个温湿度传感器1分钟频率数据上报。主要性能瓶颈是存储I/O性能而非CPU或内存,特别是在使用标准Class 10 TF卡时。通过优化存储介质(如使用A2级SD卡或外接SSD),系统性能还有10-30倍提升空间。整体而言,树莓派是部署ThingsPanel的经济有效选择,为边缘计算IoT应用提供了可行方案。
测试方法
本测试采用了多维度资源监控与实际负载测试相结合的方法,全面评估ThingsPanel在树莓派上的性能表现:
-
系统资源监控:
- 使用自定义脚本
monitor_thingspanel.sh
实时监控CPU、内存和各组件资源使用 - 使用
pg_io_monitor.sh
专门监控磁盘I/O性能,重点关注数据库分区 - 采样间隔1秒,记录各组件资源占用情况
- 使用自定义脚本
-
负载测试:
- 模拟10个IoT设备并发连接,使用MQTT协议向系统发送数据
- 测试数据发送速率约989点/秒,持续200个循环
- 通过数据库查询验证数据写入成功率和性能
-
性能分析:
- 对比空闲状态和负载状态下的资源使用差异
- 识别系统瓶颈点及其影响程度
- 分析各组件(PostgreSQL、Redis、GMQTT等)的资源占用特征
测试环境
-
硬件平台:
- Raspberry Pi 4
- CPU: 4核心ARM处理器 (aarch64架构)
- 内存: 1849MB (约2GB)
- 存储: Class 10 TF卡,根分区使用率约94%
-
软件环境:
- 操作系统: Raspbian GNU/Linux 11 (bullseye)
- ThingsPanel组件版本:
- PostgreSQL/TimescaleDB (Docker容器)
- Redis (Docker容器)
- GMQTT (PM2管理)
- Backend API (PM2管理)
- Nginx (系统服务)
-
测试工具:
- 自定义资源监控脚本
- MQTT性能测试客户端 (Go语言实现)
- 数据库监控查询脚本
资源使用总结
空闲状态 (无数据写入时)
指标 | 使用率 | 实际使用量 |
---|---|---|
总CPU使用率 | 4.2% - 7.4% | 单核最高约7.4% |
总内存使 用率 | 约35.2% | 约651MB |
磁盘写入 | 0 - 0.07MB/秒 | 几乎无写入 |
ThingsPanel总CPU | 约2.2% | 单核约2.2% |
ThingsPanel总内存 | 约21.2% | 约436MB |
负载状态 (有大量数据写入时)
指标 | 使用率 | 实际使用量 |
---|---|---|
总CPU使用率 | 92.3% - 94.1% | 单核满负载 |
总内存使用率 | 36.4% - 36.9% | 约682MB |
磁盘写入(mmcblk0p2) | 2.3 - 7.1MB/秒 | 峰值达7.1MB/秒 |
ThingsPanel总CPU | 82.3% - 113.2% | 超过单核100% |
ThingsPanel总内存 | 28.0% - 30.9% | 566MB - 621MB |
各组件资源占用分析
PostgreSQL数据库
- 空闲时 - CPU: ~0%, 内存: 13.2% (267.3MB), 磁盘写入: 几乎为0
- 负载时 - CPU: 80.1% - 111.0%, 内存: 19.9% - 22.8% (396MB - 451MB), 磁盘写入: 2.3 - 7.1MB/秒
- 特点:
- 是CPU、内存和磁盘I/O的主要消耗源
- 负载时CPU利用率可达单核满载以上
- 数据写入会产生大量磁盘I/O,是系统性能瓶颈
Redis
- 空闲/负载时 - CPU: 稳定在约1.6%, 内存: 0.4% (18.7MB), 磁盘I/O影响极小
- 特点: 资源占用稳定,不因负载增加而显著变化
GMQTT (MQTT服务器)
- 空闲/负载时 - CPU: ~0%, 内存: 0.1% (2.5MB), 磁盘I/O几乎无影响
- 特点: 资源占用极低,即使在MQTT消息频繁传输时也保持稳定
Backend (后端API服务)
- 空闲/负载时 - CPU: ~0%, 内存: 0.1% (2.7MB), 磁盘I/O影响极小
- 特点: 资源占用极低,处理能力良好,主要工作是数据传递
Nginx (Web服务器)
- 空闲/负载时 - CPU: ~0%, 内存: 0.9% (19.0MB), 磁盘I/O几乎无影响
- 特点: 资源占用稳定,轻量级
NodeJS/PM2 (进程管理)
- 空闲/负载时 - CPU: 约0.6%, 内存: 6.5% - 6.6% (126MB - 127MB), 磁盘I/O几乎无影响
- 特点: 内存占用中等,CPU占用低
磁盘I/O性能分析
从磁盘I/O监控数据可以看出以下几点重要信息:
-
I/O负载与CPU负载强相关:
- 在CPU使用率高峰期(90%+),分区写入速度稳定在2.3-3.0MB/秒
- 在某些峰值时刻,写入速度可达7.1MB/秒
-
存储性能表现:
- Class 10 TF卡的随机写入性能为系统瓶颈之一
- 写入速度在峰值负载下达到了7.1MB/秒,接近Class 10卡随机写入的性能上限
- 根分区(mmcblk0p2)使用率已达94%,这可能对写入性能有负面影响
-
特定设备与分区I/O差异:
- 整个设备(mmcblk0)的I/O监控数据与分区(mmcblk0p2)数据存在差异
- 必须监控具体分区而非整个设备,才能准确捕获数据库的I/O活动
-
数据库I/O特性:
- PostgreSQL写入模式呈现为突发性,写入速率在负载期间相对稳定
- 写入操作几乎完全由PostgreSQL数据库生成,其他组件几乎不产生磁盘写入
负载测试分析
根据测试日志中的数据,系统在执行性能测试时表现如下:
-
数据写入能力:
- 系统能够处理约989点/秒的数据写入速率
- 平均数据库写入率达到70.7% - 96.3%
- 在测试高峰期能够处理约710点/秒的数据库写入速率
-
系统响应:
- 面对高频率数据写入,CPU使用率迅速上升至90%以上
- PostgreSQL数据库成为主要的资源消耗点(CPU和磁盘I/O)
- 内存使用率保持相对稳定,仅增加约1.7%
- 磁盘写入在数据库活动期间显著增加,与CPU使用率高度相关
-
资源恢复:
- 当数据写入减少时,系统资源使用快速下降
- CPU使用率从92.3%降至25%
- PostgreSQL的CPU使用率从80.1%降至22.6%
- 磁盘写入速率迅速下降,趋近于零
关键性能瓶颈识别
基于CPU、内存和磁盘I/O的综合监控数据,可以明确识别ThingsPanel在树莓派上的主要性能瓶颈:
-
主要瓶颈 - 存储I/O性能:
- Class 10 TF卡的随机写入速度在处理数据库写入时接近极限
- 实测峰值写入速度达7.1MB/秒,接近理论上限
- 主要影响系统在高数据吞吐量情况下的稳定性
-
次要瓶颈 - CPU处理能力:
- PostgreSQL在高负载下CPU使用率超过100%,即超过单核心处理能力
- 数据库写入和查询处理是CPU密集型工作
- 多核心的利用有助于提升整体性能
-
非瓶颈 - 内存容量:
- 即使在负载下,系统内存使用率仅增加约1.7%
- 2GB内存对ThingsPanel来说有足够余量
- 内存不是当前配置下的限制因素