嵌入式设备资源有限,性能优化不能只靠“换更强芯片”。CPU、内存、启动时间、Flash 写入、网络重连都需要在设计阶段考虑。优化的第一步是测量,而不是猜。
一、先测量
常用命令:
1 | top |
如果有:
1 | perf |
也可以加入 debug 镜像。
二、CPU 占用高
先找进程:
1 | top |
再看系统调用:
1 | strace -p <pid> |
常见原因:
- 死循环。
- 高频日志。
- 无 sleep 轮询。
- 网络重连太频繁。
- JSON 解析过于频繁。
- 线程锁竞争。
嵌入式服务里,轮询一定要有节制。
三、内存问题
查看:
1 | cat /proc/<pid>/status |
常见原因:
- 消息队列无限增长。
- 断网缓存不设上限。
- 日志缓存不释放。
- 频繁 malloc/free 导致碎片。
- 第三方库泄漏。
内存优化要先设边界:缓存最大多少、离线消息最多多少、日志队列最多多少。
四、启动时间
启动慢通常来自:
- Bootloader 延时。
- 内核驱动初始化慢。
- rootfs 检查慢。
- 启动脚本串行执行太多。
- 应用初始化阻塞。
可以在 rcS 中加时间点:
1 | echo "$(date +%s) start network" >> /data/log/boot_time.log |
更好的方式是用内核 bootchart 或 systemd-analyze,但精简系统不一定具备。
五、减少无效工作
常见优化:
- 非关键服务延迟启动。
- 网络起来后再启动依赖网络的业务。
- 大日志异步写。
- 配置只在变更时落盘。
- MQTT 重连指数退避。
- 图片、模型、资源按需加载。
优化要和稳定性一起看,不能为了快牺牲可恢复能力。
六、验收指标
可以定义:
- 开机到 shell 时间。
- 开机到业务在线时间。
- 空闲 CPU。
- 空闲内存。
- MQTT 断网恢复时间。
- OTA 写入耗时。
- 日志分区增长速度。
有指标,性能优化才不会变成主观感觉。
- 本文链接: https://blog.hansong.icu/2026/06/26/Embedded_Linux_Series_19_Performance_Tuning/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。