如果你的 OpenWrt 设备内存有限,在 USB 磁盘上使用 swapfile 可以帮助防止运行 Docker 或其他高负载服务时出现 OOM 内存耗尽问题。以下是在 mountd 下简单可靠的设置方法。
- 检查当前内存和 Swap 状态
swapon -s cat /proc/swaps如果 Swap 显示为 0,说明当前未使用 Swap。
- 在 USB 上创建一个 512MB 的 swapfile
请根据实际的 USB 挂载路径调整命令中的路径。
dd if=/dev/zero of=/tmp/mountd/disk1_part1/swapfile bs=1M count=512确保权限安全
这一步非常重要。chmod 600 /tmp/mountd/disk1_part1/swapfile将文件格式化为 Swap
mkswap /tmp/mountd/disk1_part1/swapfile立即启用 Swap 无需重启
swapon /tmp/mountd/disk1_part1/swapfile
验证命令:
free -hswapon -scat /proc/swaps- 调整 Swap 行为推荐设置
降低 swappiness 值,优先使用物理内存,仅在需要时使用 Swap:sysctl -w vm.swappiness=10echo 'vm.swappiness=10' >> /etc/sysctl.conf
检查设置:
sysctl vm.swappiness- 重启后自动启用 Swap
USB 磁盘通过 mountd 挂载的时间较晚,过早启用 Swap 通常会导致失败。这里的 init 脚本会等待直到 swapfile 确实存在,具有良好的挂载安全性。
创建 init 脚本:
vi /etc/init.d/swap-delay粘贴以下内容:
#!/bin/sh /etc/rc.commonSTART=99start() { ( for i in $(seq 1 120); do if [ -f /tmp/mountd/disk1_part1/swapfile ]; then logger -t swap-delay "Enabling swap from mountd path" swapon /tmp/mountd/disk1_part1/swapfile exit 0 fi sleep 1 done logger -t swap-delay "Swapfile not found, giving up" ) &}启用脚本并重启
chmod +x /etc/init.d/swap-delay/etc/init.d/swap-delay enablereboot重启后验证
free -hswapon -slogread | grep swap-delay
一旦 USB 磁盘挂载完成,你应该能看到 Swap 被自动启用。
- 注意事项与提示
Swapfile 相比 Swap 分区具有更好的灵活性。
尽可能使用 USB 3.0 存储设备,因为 USB 2.0 速度较慢且在高负载下不够稳定。
保持合理的 Swap 大小,通常 256MB 到 512MB 已经足够。
Swap 有助于提升系统稳定性,无法提升性能。
P.S.最近买了一台GL-MT3600BE Wi-Fi路由器。虽然是四核2.0 GHz CPU,但内存仅有512 MB。