内存硬核诊断与 Swap 调优
当 NAS 频繁死机、文件解压CRC错误、或者 Docker 容器莫名崩溃时,问题往往不在软件,而在内存条。DSM 自带了一个隐藏的内存检测工具,类似于 Windows 的 MemTest86。
此外,Linux 默认的 Swap(虚拟内存)策略可能导致硬盘狂响。本文教你如何硬核诊断和调优。
1. 启用 Synology Memory Test (内存自检)
这不是在 DSM 界面里点的,它需要重启并进入特殊模式。
适用场景
- 新买了第三方内存条,想测试兼容性。
- NAS 经常无故重启或死机。
- Btrfs 文件系统频繁报错(数据校验和不匹配)。
操作步骤
- 下载 Synology Assistant:在电脑上安装这个官方工具(去群晖官网下载中心)。
- 准备测试:确保 NAS 处于开机状态。
- 启动测试:
- 打开电脑端的 Synology Assistant。
- 点击右上角的 齿轮图标 (偏好设置)。
- 勾选 启用高级服务 (Enable Advanced Services)。
- 在列表中选中你的 NAS。
- 点击上方的 内存测试 按钮。
- 过程:
- NAS 会重启。
- 注意:测试过程非常漫长(根据内存大小,可能需要 1-5 小时)。
- 期间 NAS 无法访问,且状态灯会闪烁。
- 测试完成后,NAS 会自动重启进入 DSM。
- 查看结果:
- 重启完成后,登录 DSM。
- 通知中心会弹出一个通知,告诉你测试是否通过。
- 如果没弹,去 日志中心 搜索
Memtest关键字。
2. Swap (虚拟内存) 深度调优
很多用户发现 NAS 即使内存还有空余,硬盘也在“滋滋”响。这可能是 Linux 的 Swappiness 策略太激进,过早地把内存数据搬到了硬盘上。
什么是 Swappiness?
- Linux 内核参数,范围 0-100。
- 值越高:越积极地使用 Swap(硬盘),以此留出更多物理内存给文件缓存。
- 值越低:尽可能使用物理内存,直到撑不住了才用 Swap。
- DSM 默认值:通常是
10或60(取决于机型)。
为什么需要调整?
- 机械硬盘噪音:频繁读写 Swap 会导致炒豆子般的噪音。
- 性能卡顿:从硬盘读回数据比内存慢几万倍。
- SSD 寿命:如果你把 Swap 放在 SSD 缓存上,频繁写入会损耗寿命。
调优步骤 (SSH)
- 查看当前值:
- 临时修改 (立即生效):
- 验证效果:
- 观察几天,看“炒豆子”声音是否减少,系统响应是否变快。
- 如果内存本来就只有 2GB 且跑了 Docker,设太低可能会导致 OOM (内存溢出) 杀进程,请谨慎。
- 永久生效 (重启不失效):
- DSM 可能会在重启后重置此参数。你需要创建一个启动脚本。
- 控制面板 > 任务计划 > 新增 > 触发的任务 > 用户定义的脚本。
- 事件:开机。
- 用户:root。
- 脚本:
3. ZRAM (内存压缩) —— 救活小内存机器
如果你的 NAS 内存只有 2GB 且无法升级(如某些 ARM 机型或板载内存),可以尝试开启 ZRAM。
- 原理:在物理内存中划出一块区域,作为“压缩的 Swap”。数据写入时先压缩,读出时解压。
- 效果:用 CPU 算力换取内存空间。2GB 内存能当 3GB 用。
- DSM 支持:DSM 7.x 部分机型内核已支持 ZRAM,但默认未开启。
- 检查支持: 如果有输出,说明内核支持。
- 开启方法:
- 这是一个高级操作,通常需要通过第三方脚本(如
memory-compactor)来实现。 - 警告:新手不建议折腾 ZRAM,买根内存条是最简单的方案。
- 这是一个高级操作,通常需要通过第三方脚本(如
4. 内存泄露 (Memory Leak) 排查
如果你的内存占用率每天通过 10% 的速度稳步上涨,重启后归零,那多半是某个软件内存泄露了。
- 嫌疑人 Top 3:
- 第三方 Docker 容器:尤其是 Java 写的应用(如 Minecraft 服务器)或 Python 爬虫。
- Plex / Emby / Jellyfin:在扫描超大媒体库时可能会吃光内存。
- Antivirus Essentials:ClamAV 杀毒引擎是非常吃内存的,建议小内存机器卸载。
- 对策:
- 给 Docker 容器设置 内存限制 (Memory Limit)。
- 在 任务计划 中设置每周自动重启特定的 Docker 容器。