系统内存与Swap优化记录

系统内存与 Swap 优化记录

日期:2026年7月29日

背景

系统配置:

  • CPU:多核 x86_64
  • 内存:16GB(系统识别约 15GB)
  • 存储:NVMe SSD 453GB
  • 桌面:KDE Plasma(Wayland)
  • 用途:日常开发(opencode、编译、浏览器)

问题: 传统磁盘 Swap 会频繁写入 SSD,影响寿命。同时系统存在大量开发工具缓存(npm 6.6G、rustup 2.4G 等),需要评估是否清理。

分析过程

1. 磁盘使用情况

复制代码
/dev/nvme0n1p2  453G   38G  392G    9%

磁盘使用率仅 9%,空间充裕。

2. Swap 使用分析

复制代码
Filename                Type        Size        Used        Priority
/dev/nvme0n1p3          partition   16081916    996968      -2

Swap 分区 15GB,已用约 975MB。关键发现: 这不是内存不足导致的,而是 Linux 内核主动将冷数据换出,腾出内存给文件缓存。

3. 内存使用分析

复制代码
               total        used        free      shared  buff/cache   available
内存:          14Gi       7.6Gi       741Mi       1.1Gi       8.2Gi       7.4Gi
  • 程序实际占用:约 7.6G
  • 文件缓存:约 8.2G(加速文件操作)
  • 可用内存:约 7.4G

内存大户:

  • opencode × 5:共约 4.5G(每个约 900MB)
  • KDE 桌面:约 1.5G
  • 百度网盘:约 250MB

4. 开发工具缓存评估

缓存 大小 保留好处
~/.npm 6.6G npm install 秒装,离线也能装
~/.cache/go-build 425M Go 编译快,跳过已编译的包
~/.cargo 339M cargo build 不用重新下载依赖
~/.rustup 2.4G Rust 工具链本体

结论: 磁盘空间充裕(使用率 9%),这些缓存本质是"用空间换时间",保留有益无害。

技术方案对比

Swap 方案对比

方案 原理 优势 劣势 适用场景
传统 Swap 冷数据写入磁盘 简单可靠,容量大 磁盘 I/O 慢,磨损 SSD 通用服务器
zram 内存里压缩存储 极速(微秒级),零磁盘写入 容量硬上限,满则 OOM 嵌入式/无磁盘/安全敏感
zswap 压缩缓存层 + 磁盘 Swap 自动分层,优雅降级 需要磁盘 Swap 分区 通用桌面/服务器

压缩算法对比

算法 压缩比 CPU 开销 推荐
lz4 2:1 ~ 3:1 最低 低配设备
zstd 3:1 ~ 8:1 略高 主流推荐
lzo-rle 2:1 ~ 3:1 折中选择

内核参数对比

参数 默认值 zram 优化值 说明
vm.swappiness 60 100~150 更积极使用 zram
vm.page-cluster 3 0 zram 不需要连带读取
vm.vfs_cache_pressure 100 50 保留更多文件缓存

最终配置

1. 关闭磁盘 Swap

bash 复制代码
# 关闭 swap
sudo swapoff /dev/nvme0n1p3

# 永久禁用(/etc/fstab 中注释掉)
# UUID=a8a96227-3dab-4118-8b25-36ee13a20aa7 none swap sw 0 0

保留分区: 16G swap 分区留着备用,极端情况可临时 swapon 救急。

2. 启用 zram

bash 复制代码
# 安装
sudo apt install zram-tools

# 配置 /etc/default/zramswap
ALGO=zstd
PERCENT=50
PRIORITY=100

当前状态:

复制代码
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd        7.5G   0B   0B    0B      1     [SWAP]

3. 内核参数优化

创建 /etc/sysctl.d/99-zram-optimize.conf

ini 复制代码
vm.swappiness = 100
vm.page-cluster = 0
vm.vfs_cache_pressure = 50

应用:

bash 复制代码
sudo sysctl -p /etc/sysctl.d/99-zram-optimize.conf

优化效果

内存布局

复制代码
14G 物理内存 + 7.5G zstd 压缩 ≈ 有效内存 20~30G

对比

指标 优化前 优化后
Swap 类型 磁盘 Swap(15G) zram(7.5G,zstd)
Swap 延迟 毫秒级(SSD) 微秒级(内存)
SSD 磨损
压缩比 3:1 ~ 8:1
vm.swappiness 60 100
vm.page-cluster 3 0
vm.vfs_cache_pressure 100 50

启动服务优化

禁用不必要的开机自启动服务,加快启动速度约 5 秒:

bash 复制代码
sudo systemctl disable NetworkManager-wait-online.service
sudo systemctl disable apt-daily.service apt-daily.timer
sudo systemctl disable apt-daily-upgrade.service apt-daily-upgrade.timer
sudo systemctl disable docker.service docker.socket

其他优化

桌面快捷方式

将脚本统一到 ~/sh/ 目录,使用 toggle 模式(点击切换开/关,弹通知显示状态):

脚本 功能
easytier-toggle.sh VPN 开关
sleep-toggle.sh 休眠开关
nfs-toggle.sh NFS 挂载/卸载
proxy-shell-toggle.sh Shell 代理开关
proxy-kde-toggle.sh KDE 代理开关

图标优化

替换 emblem-symbolic-link.svg 为透明图片,去除桌面快捷方式右下角小箭头。

总结

  1. zram 是现代 Linux 的最佳 Swap 方案:零磁盘写入,延迟微秒级,压缩比高
  2. zstd 算法是最佳选择:压缩率比 lz4 高一倍,CPU 开销对现代处理器微不足道
  3. 内核参数需要配合调整:swappiness、page-cluster、vfs_cache_pressure
  4. 开发缓存不需要清理:磁盘空间充裕,缓存提升开发效率
  5. 禁用不必要的启动服务:加快启动速度

参考资料

相关推荐
fangjianj4 小时前
LAMP 项目部署
linux
mengge.cloud5 小时前
0909华为云计算类综合服务小白实验教程
linux·运维·服务器·网络·华为云·云计算
fangjianj5 小时前
自有服务及软件包
linux
风哥2号7 小时前
数据库教程FGMT03‑生产环境Linux+Oracle19c+ASM安装配置与项目实战
linux·数据库
一木 之林7 小时前
七、一-AI 工程实践、插件化调试与软件交付
java·linux·c++
zhengqweasd7 小时前
Linux网络(一):服务器数据包从网卡到应用程序,完整收包流程详解
linux·服务器·网络
脚踏实地,坚持不懈!8 小时前
Linux 6.18.7 内存分配与回收 —— 代码梳理
linux·运维·网络
byte轻骑兵8 小时前
【BlueZ 】hci 模块:用户态 HCI 层的核心封装与消息处理
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
Android系统攻城狮9 小时前
Linux Gstreamer深度解析之gst_audio_format_build_integer调用流程与实战(十二)
linux·运维·服务器·音视频·车载音视频·gstreamer进阶
吴声子夜歌9 小时前
Shell脚本——流程控制:for循环
linux·运维·shell