树莓派5 优化与踩坑

本文记录我使用树莓派 5 过程的经验,即是笔记,也是分享。

优化:增大 swap 分区

我在我的树莓派 5 4GB 上跑 Docker,部署了多个服务。当加入 Nextcloud 后,系统开始出现明显卡顿,响应速度大幅下降。输入 top 命令发现,内存几乎用满,swap 更是直接 100% 占用:

MiB Mem :   4049.9 total,    146.7 free,   3369.8 used,    789.0 buff/c
MiB Swap:    200.0 total,      0.0 free,    200.0 used.    680.1 avail

这时我才发现树莓派 5 的 Raspberry Pi OS (Bookworm) 默认仅配置了 200MB swap。这个保守的设置可能是为了照顾使用 SD 卡的用户——毕竟频繁的 swap 读写会严重缩短 SD 卡寿命。

但既然树莓派 5 已经配备了 PCIe 接口,官方也推出了专用的 M.2 HAT+ 和 SSD 套件,如果你和我一样使用 SSD 作为系统盘,完全可以将 swap 调大,充分发挥 SSD 的读写性能和耐用性优势。

  1. 打开配置文件:

    sudo nano /etc/dphys-swapfile
  2. 修改 CONF_SWAPSIZE,我的树莓派系统是安装在 SSD 上的,所以 swap 调大点没关系。如果你用的是 SD 卡,建议设置小点,不要超过 1GB,因为频繁的 swap 读写会大幅缩短 SD 卡寿命。

    CONF_SWAPSIZE=4096  

    为了设置超过 2GB 的 swap, 还需要修改 CONF_MAXSWAP 调大限制,可以和 CONF_SWAPSIZE 一致,也可以设置的更大一些方便后续调整。

    CONF_MAXSWAP=4096
  3. 重启 swap 服务

    sudo /etc/init.d/dphys-swapfile restart
  4. 验证

    free -h

优化:开启 zram

在 AI 的建议下,我还开启了 zram。zram 是一个在内存中创建压缩交换空间的技术。简单来说,它会将不常用的内存页压缩后存储在内存里,通常能达到 2-3 倍的压缩比。对于树莓派这种内存有限的设备来说,zram 是个非常实用的优化手段。

  1. 安装

    sudo apt update
    sudo apt install zram-tools
  2. 验证

    cat /proc/swaps

    可以看到

    Filename                                Type            Size            Used            Priority
    /dev/zram0                              partition       262128          257344          100
    /var/swap                               file            4194288         697648          -2

避坑:树莓派 5 PCIe 排线干扰

如果你使用树莓派 5 搭配 树莓派官方 M.2 套件(HAT+),建议不要把树莓派直接叠放在路由器上。

之前有段时间,我发现树莓派经常重启,有时甚至直接卡死无响应。最严重的一次,我部署的 Karakeep 书签服务因为底层数据错误导致数据库损坏,数据瞬间全丢,万幸最后从 Meilisearch 中抢救回来了。

排查过程中我尝试了很多方法(包括修改PCIe节能设置等),最后发现罪魁祸首可能是官方 FPC 排线的抗干扰能力不足(虽然官方说是抗干扰的)。后来我将树莓派与路由器物理分离一段距离后,就再也没出现过类似问题。

如果你不需要使用树莓派的 WiFi 功能,也建议关闭。

参考链接

https://linuxblog.io/raspberry-pi-performance-add-zram-kernel-parameters/

https://github.com/geerlingguy/raspberry-pi-pcie-devices/issues/559