安装Fedora Silverblue后发现卡顿?5个优化技巧让系统流畅运行(包含关闭无用服务与容器缓存配置方法)
刚装完 Fedora Silverblue 的你,是不是发现电脑变得不那么丝滑了?别慌,这事儿我太理解了。Silverblue 这套 Immutable 架构确实和传统 Linux 发行版玩法不太一样,很多服务默认开着,磁盘缓存配置也偏向通用场景,稍微调一调就能找回那种「指哪打哪」的流畅感。今天不扯什么宏大叙事,就说说我亲测有效的 5 个优化姿势,手把手带你把系统驯服。
1. 揪出那些偷偷吃资源的后台服务
Silverblue 默认启用了一套相当「热情」的后台服务,有些对普通用户来说纯属多余。比如 ModemManager,除非你真的用 3G/4G 网卡或旧式调制解调器,否则它就是个闲散劳动力。还有 avahi-daemon,搞局域网发现用的,你要是从来不搞 mDNS 共享打印,这玩意儿纯属占着茅坑不拉屎。
先看看系统里到底跑了哪些服务:
# 用 rpm-ostree 的命令查看活跃服务
rpm-ostree status
# 查看 systemd 服务状态,重点关注 CPU/内存占用高的
systemd-cgtop
systemd-cgtop 的输出会像这样:
Control Group Tasks %CPU Memory Read/s Write/s I/O Util Path
system.slice 97 2.4 245M 0.00 0.00 0.0% /system.slice
...
── user.slice ──────────────────────────────────────────────
├─user-1000.slice 45 0.8 112M 0.00 0.00 0.0% /user.slice
...
找到可疑的之后,用传统 systemctl 的方式关掉就行,别慌,Silverblue 虽然根目录是只读的,但用户态服务管理没限制:
# 关闭 ModemManager
sudo systemctl stop ModemManager
sudo systemctl disable ModemManager
# 关闭 avahi-daemon(如果你不需要局域网发现)
sudo systemctl stop avahi-daemon
sudo systemctl disable avahi-daemon
# 关闭 Cups(打印机服务,不用打印机可以直接关)
sudo systemctl stop cups
sudo systemctl disable cups
# 关闭 Bluedevil(蓝牙服务,不用蓝牙可以关)
sudo systemctl stop bluedevil
sudo systemctl disable bluedevil
关掉之后用 systemd-cgtop 再刷一下,你会发现系统空闲态的资源占用确实降了一些。有个朋友之前每天内存占用 2.1G,关掉这几个之后稳定在 1.7G 左右,对内存只有 8G 的老笔记本来说,这 400M 的差距就是「卡」和「流畅」的区别。
2. 给容器运行时换个更省内存的配置
Silverblue 的灵魂是 Flatpak 和 Toolbox,底层依赖的是 podman。默认配置下,podman 的资源占用并不算特别激进,但如果你同时开着多个 Toolbox 容器,或者频繁拉取/更新 Flatpak 应用,内存和磁盘压力会明显上来。
先看当前容器存储用了多少:
podman system df
输出大致如下:
Type Total Active Size Reclaimable
Images 12 8 2.1GB 890MB (42%)
Containers 3 2 456MB 120MB (26%)
Local Volumes 5 3 340MB 89MB (26%)
那个「Reclaimable」就是你可以回收的垃圾。如果数字比较大,运行这个:
# 清理未使用的镜像和容器
podman system prune -a
# 清理卷
podman volume prune
# 清理构建缓存(如果你经常用 podman build)
podman builder prune -a
不过更关键的是调整容器运行时本身的内存限制。编辑 podman 的配置文件:
sudo systemctl edit podman.socket
如果文件不存在,新建 /etc/containers/storage.conf:
[storage]
driver = "overlay"
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
# 限制容器内存使用(单位 MB)
[engine]
cgroup_manager = "systemd"
然后重启 podman 服务:
sudo systemctl daemon-reload
sudo systemctl restart podman.socket
这里有个技巧,fuse-overlayfs 比默认的 overlay2 在内存使用上更友好,尤其是当你没有 root 权限或者在内核权限受限的环境里。Silverblue 默认就是 fuse-overlayfs,确认一下你的配置:
podman info | grep -A 5 graphDriverName
如果显示的是 overlay 而不是 fuse-overlayfs,可以去检查一下 /etc/containers/storage.conf 里的配置是否正确。
3. 调整 Swap 策略,别让内存交换拖后腿
很多 Silverblue 用户用的是 SSD,默认的 vm.swappiness=60 在 SSD 上其实不算太伤人,但如果你想要更「响应迅速」的体验,可以把这个值调低。swappiness 的值范围是 0~100,越小表示越不愿意用 swap,越大越激进。
先看当前的值:
cat /proc/sys/vm/swappiness
默认应该是 60。改成 10 到 20 之间比较合适:
# 临时生效(重启后恢复)
sudo sysctl vm.swappiness=10
# 永久生效,编辑配置文件
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system
改完之后跑个简单测试,开几个大应用然后看内存和 swap 的使用情况:
watch -n 1 'free -h && cat /proc/sys/vm/swappiness'
你会看到窗口左侧的内存/swap 使用情况,右侧是当前的 swappiness 值。如果你把值改小后发现 swap 几乎不动了,说明调整生效。
另外,Swap 分区/文件的大小也值得注意。如果你的内存是 8G 或更小,建议 swap 至少给 8G;16G 以上可以给 8G 或者用 hibernate 的话给 20G 左右。查看当前 swap 配置:
swapon --show
free -h
4. 优化 Flatpak 的缓存和更新频率
Flatpak 是 Silverblue 的应用分发主力,但默认设置下它每次更新都会下载完整的包,缓存策略也比较保守。如果你的网络速度一般,或者磁盘空间紧张,调整 Flatpak 的配置会很有帮助。
先看看 Flatpak 缓存用了多少空间:
flatpak info --show-detailed | grep -i cache
du -sh ~/.var/app 2>/dev/null
然后编辑 Flatpak 的配置文件:
# 创建或编辑用户级配置
mkdir -p ~/.config/flatpak
创建 /etc/flatpak/install.d/99-optimization.conf(系统级)或者 ~/.config/flatpak/flatpak.conf(用户级):
[FLATPAK]
# 启用增量更新,减少下载量
AutoUpdatePeriod=1D
# 只保留最近一个版本(节省磁盘)
RemoveOldVersions=1
# 缓存策略:只缓存当前使用的
CacheType=2
CacheType 的取值:
0:不缓存1:缓存所有(默认,占空间)2:只缓存当前版本3:缓存所有但定期清理
如果你磁盘空间吃紧,建议用 2 或 3。
更新 Flatpak 应用时,也可以手动控制频率,别让它每次开机都静默更新:
# 查看自动更新的定时任务
systemctl list-timers | grep flatpak
# 关掉自动更新,改为自己手动控制
sudo systemctl disable --now flatpak-update.timer
sudo systemctl disable --now flatpak-system-update.timer
# 需要更新时手动跑
flatpak update
有个实际案例,一个同事的笔记本 256G SSD,装了十几个 Flatpak 应用,每次更新都卡半天。关掉自动更新定时器之后,改为每周一早上手动更新一次,系统启动流畅度和日常响应速度都有明显提升。
5. 调整内核参数,让系统调度更激进
前面几个都是用户态的调整,最后一个我们稍微深入一点,看看内核级别的优化。Silverblue 默认的内核参数偏向稳定节能,对于桌面使用来说有时候会显得「慵懒」。
先看当前的关键参数:
# CPU 调频策略
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# IO 调度器
cat /sys/block/sda/queue/scheduler
# 内核参数概览
sysctl vm.vfs_cache_pressure
sysctl kernel.sched_autogroup_enabled
常见的调优方向:
# 1. 把 CPU 调频策略改为 performance(性能模式)
sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor <<< performance
# 2. 设置 IO 调度器为 mq-deadline(对 SSD 更友好)
# 假设你的磁盘是 /dev/sda,NVMe 设备用 /dev/nvme0n1
echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler
# 3. 调整 vfs_cache_pressure( inode/dentry 缓存回收倾向,默认 100)
# 降低到 50 可以减少磁盘查找次数
sudo sysctl -w vm.vfs_cache_pressure=50
# 4. 启用 autogroup 调度(让 GUI 应用优先级更高)
sudo sysctl -w kernel.sched_autogroup_enabled=1
让上面的内核参数开机自动生效,创建配置文件:
sudo tee /etc/sysctl.d/99-silverblue-performance.conf << 'EOF'
# CPU 调频策略 - 通过 systemd 服务在启动时设置
vm.vfs_cache_pressure = 50
kernel.sched_autogroup_enabled = 1
EOF
对于 CPU 调频策略,需要用 systemd 服务来持久化:
sudo tee /etc/systemd/system/cpu-governor.service << 'EOF'
[Unit]
Description=Set CPU governor to performance
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo performance > $f; done'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now cpu-governor.service
同理,IO 调度器也需要一个服务:
sudo tee /etc/systemd/system/iosched-set.service << 'EOF'
[Unit]
Description=Set IO scheduler to mq-deadline
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo mq-deadline > /sys/block/sda/queue/scheduler'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now iosched-set.service
一个小提醒:别忘了用 distrobox 减少资源浪费
Silverblue 用户经常会有开发需求,Toolbox 和 Distrobox 是标配。但如果你同时开着好几个 Toolbox 容器,每个都是一个完整的 Linux 环境,内存占用会叠加。
# 查看当前运行的容器
podman ps
# 关闭不用的容器
podman stop <container-name>
podman rm <container-name>
# 或者用 distrobox 管理
distrobox list
distrobox enter my-dev-box -- logout # 退出并停止
一个建议:按需启动,用完就关。不要为了「方便」而常驻一堆容器,它们不会自己减肥的。
总结一下
这套优化流程我建议你按顺序来:先关服务,再调 Swap 和容器缓存,最后动内核参数。每一步改完都观察一下系统状态,用 systemd-cgtop 和 htop 对照看看效果。如果你遇到某个优化点效果不明显,也别执着,不同硬件场景下的收益差异挺大的。
最重要的原则是:先观察,再动手。别一口气把所有参数全改掉,那样出了问题都不知道是哪一步导致的。每次改一个,用几天感受一下,合适就留着,不合适就改回来。
祝你用得上这套方法,让 Silverblue 真正跑起来。
