banner
NEWS LETTER

嵌入式 Linux 系列 19:CPU、内存和启动性能调优

Scroll down

嵌入式设备资源有限,性能优化不能只靠“换更强芯片”。CPU、内存、启动时间、Flash 写入、网络重连都需要在设计阶段考虑。优化的第一步是测量,而不是猜。

一、先测量

常用命令:

1
2
3
4
5
6
top
ps
free
cat /proc/meminfo
cat /proc/uptime
dmesg

如果有:

1
2
3
perf
strace
time

也可以加入 debug 镜像。

二、CPU 占用高

先找进程:

1
top

再看系统调用:

1
strace -p <pid>

常见原因:

  • 死循环。
  • 高频日志。
  • 无 sleep 轮询。
  • 网络重连太频繁。
  • JSON 解析过于频繁。
  • 线程锁竞争。

嵌入式服务里,轮询一定要有节制。

三、内存问题

查看:

1
2
cat /proc/<pid>/status
cat /proc/<pid>/smaps

常见原因:

  • 消息队列无限增长。
  • 断网缓存不设上限。
  • 日志缓存不释放。
  • 频繁 malloc/free 导致碎片。
  • 第三方库泄漏。

内存优化要先设边界:缓存最大多少、离线消息最多多少、日志队列最多多少。

四、启动时间

启动慢通常来自:

  • Bootloader 延时。
  • 内核驱动初始化慢。
  • rootfs 检查慢。
  • 启动脚本串行执行太多。
  • 应用初始化阻塞。

可以在 rcS 中加时间点:

1
echo "$(date +%s) start network" >> /data/log/boot_time.log

更好的方式是用内核 bootchart 或 systemd-analyze,但精简系统不一定具备。

五、减少无效工作

常见优化:

  • 非关键服务延迟启动。
  • 网络起来后再启动依赖网络的业务。
  • 大日志异步写。
  • 配置只在变更时落盘。
  • MQTT 重连指数退避。
  • 图片、模型、资源按需加载。

优化要和稳定性一起看,不能为了快牺牲可恢复能力。

六、验收指标

可以定义:

  • 开机到 shell 时间。
  • 开机到业务在线时间。
  • 空闲 CPU。
  • 空闲内存。
  • MQTT 断网恢复时间。
  • OTA 写入耗时。
  • 日志分区增长速度。

有指标,性能优化才不会变成主观感觉。

其他文章
目录导航 置顶
  1. 1. 一、先测量
  2. 2. 二、CPU 占用高
  3. 3. 三、内存问题
  4. 4. 四、启动时间
  5. 5. 五、减少无效工作
  6. 6. 六、验收指标
请输入关键词进行搜索