Fedora 作为红帽系发行版中的先锋,默认搭载的组件偏新、偏重,这在一台配置不错的台式机上没什么问题,但放到一台 8GB 内存、机械硬盘的老笔记本上,就可能出现开机后内存占用过半、磁盘灯常亮、风扇狂转的情况。资源利用率优化并不是玄学,本质上就是砍掉不必要的服务、调整内核的内存与 I/O 策略、给桌面环境减负这三件事。下面按照实际排查和优化的顺序,逐一展开讲。

先搞清楚瓶颈在哪:监控工具的使用
动手优化之前,必须先知道资源被谁吃掉了。盲目照抄网上的优化清单,很可能关掉了自己正在依赖的服务。CPU、内存、磁盘 I/O 三大瓶颈,分别对应不同的排查工具。
CPU 和内存层面,htop 是比 top 更友好的选择,它支持鼠标操作、树状视图和颜色区分。安装方式:sudo dnf install htop。打开后重点看几列:CPU 各核心的占用条、MEM 列、以及按 F6 切换排序字段,找出常驻且占用异常的进程。磁盘 I/O 层面用 iotop,需要 root 权限运行:
# 安装监控工具 sudo dnf install htop iotop sysstat # 观察哪个进程在持续读写磁盘 sudo iotop -o # 查看整体 I/O 与 CPU 等待情况 vmstat 2 iostat -x 2
iotop -o 只显示有实际 I/O 活动的进程,比全量输出更易读。vmstat 输出中要特别关注 wa(iowait)列,如果这个数值长期高于 10,说明瓶颈大概率在磁盘而不是 CPU。还有一个容易忽略的点:systemd-analyze blame 可以列出每个服务拖慢开机的时间,配合 systemd-analyze critical-chain 查看关键链路,是判断哪些服务值得清理的直接依据。
砍掉不必要的服务与后台进程
Fedora 默认启用的服务不少是面向服务器或特定场景的,桌面用户完全可以禁用。常见的可清理对象包括蓝牙相关服务(没蓝牙设备时)、打印服务(无打印机时)、以及一些自动更新和报告类组件。
禁用服务要遵守一个原则:用 disable 而不是 mask,前者只是不随开机启动,后者会彻底锁死服务,出了问题不好排查。操作示例:
# 查看开机耗时排行,找出拖慢启动的服务 systemd-analyze blame | head -20 # 没有蓝牙设备就关掉蓝牙 sudo systemctl disable --now bluetooth.service # 没有打印机就关掉打印服务 sudo systemctl disable --now cups.service # 关闭 ModemManager(无移动网卡设备时) sudo systemctl disable --now ModemManager.service # 平衡版早鸟更新检查,可改为手动执行 sudo systemctl disable --now dnf-make.timer
除了 systemd 服务,GNOME 桌面还有自己的后台体系。打开「设置 - 隐私」可以看到位置服务、报告技术问题等开关,按需关闭。abrt(自动错误报告工具)在 Fedora 桌面版上意义不大,可以连同 abrt-addon-ccpp 一起卸载,减少它对崩溃信息的磁盘写入。另外,如果你的机器内存紧张,浏览器往往是最大户,启用 Firefox 的标签页休眠、限制扩展数量,效果比折腾系统还明显。
内存与 Swap 策略调整
Fedora 桌面版从 33 版本起默认采用 zram,也就是用压缩内存模拟 swap 分区。这个设计对低内存机器非常友好,但在具体参数上仍有调整空间。先确认当前状态:
# 查看交换空间情况 swapon --show # 查看当前 swappiness 值 cat /proc/sys/vm/swappiness
如果输出里有 /dev/zram0,说明 zram 已生效。zram 的大小默认约为内存的一半,对于 8GB 机器可以适当调大,让系统更倾向于把冷数据压缩存放,而不是直接挤占活跃内存。创建一个 systemd 配置:
sudo vim /etc/systemd/zram-generator.conf # 写入类似配置,将 zram 设为内存的 75% [zram0] zram-size = ram * 0.75 compression-algorithm = zstd
修改后执行 sudo systemctl restart systemd-zram-setup@zram0.service 或直接重启生效。关于 swappiness:传统硬盘时代建议调低到 10 以减少换页,但在 zram 方案下反而建议保持默认 100 甚至更高,因为换到 zram 的数据仍在内存中,只是被压缩了,访问代价远低于机械硬盘换页。这是个容易被旧教程误导的点,需要特别注意。如果你的机器还保留物理 swap 分区且使用 SSD,两者可以共存,内核会优先使用高优先级的 zram。
此外,vfs_cache_pressure 控制内核回收目录项缓存的趋势,默认 100。内存紧张时可适当调到 150,促使内核更快回收缓存页:
# 临时生效 sudo sysctl -w vm.vfs_cache_pressure=150 # 写入配置文件使其永久生效 echo "vm.vfs_cache_pressure=150" | sudo tee /etc/sysctl.d/99-tune.conf
I/O 调度器与文件系统层面优化
磁盘调度器决定了 I/O 请求的排队策略,不同介质适配不同算法。机械硬盘适合 bfq(公平排队,避免交互任务被饿死),NVMe 固态硬盘则基本没有寻道开销,用 none 让请求直达设备反而延迟更低。查看与切换方法:
# 查看各设备的调度器
cat /sys/block/sda/queue/scheduler
cat /sys/block/nvme0n1/queue/scheduler
# 临时为机械盘切换到 bfq
echo bfq | sudo tee /sys/block/sda/queue/scheduler
# 通过 udev 规则按设备类型自动匹配
sudo vim /etc/udev/rules.d/60-io-scheduler.rules
# 写入:
# ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
# ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"文件系统方面,Fedora 默认的 ext4 和 btrfs 都已相当成熟。使用 btrfs 的用户要注意周期性的 balance 操作,长期运行后元数据分配不均会导致写入变慢,可以每月执行一次 sudo btrfs balance start -dusage=50 /。定期 fstrim 对 SSD 维持写入性能也很重要,Fedora 已默认启用 fstrim.timer,用 systemctl status fstrim.timer 确认即可。
桌面环境减负与日常维护
GNOME 的动画和扩展是隐性资源消耗点。「 tweaks 」工具中关闭动画,或直接 gsettings set org.gnome.desktop.interface enable-animations false,在低配机器上观感提升明显。GNOME Shell 扩展每个都是常驻 JS 进程,装得越多内存占用和崩溃风险越高,建议只保留真正常用的几个。如果硬件实在吃紧,换用 XFCE 或 LXQt 这类轻量桌面是更彻底的方案,Fedora 官方提供对应的 Spin 版本。
日常维护层面,dnf 的缓存会随着时间累积,执行 sudo dnf clean all 释放空间;journalctl --disk-usage 查看日志占用,必要时在 /etc/systemd/journald.conf 中设置 SystemMaxUse=200M 限制日志上限。最后要强调,优化不是一锤子买卖,改完一项就用 htop 和 vmstat 观察一段时间,确认有效再进行下一项,这样出了问题也能快速回滚到具体某次改动,而不是面对一堆变更无从下手。