☰
Ubuntu性能优化策略:从启动内核到电源散热的五层调优实战
2026/10/13 17:16:35 网站建设 项目流程

1. 为什么“系统优化”是个伪命题,而策略才是真功夫

很多人一提到 Ubuntu 优化,脑子里蹦出来的第一反应就是“清理垃圾”“关闭特效”“换轻量桌面”,然后照着某些帖子敲一堆命令,重启之后发现——好像快了一点点,又好像什么都没变。我刚开始折腾 Ubuntu 那几年也是这个路子,后来才慢慢想明白一件事:优化不是一套万能脚本,而是一组根据硬件条件和使用场景做出的取舍策略。

这篇文章想聊的,就是这套“策略”层面的东西。它适合谁看?如果你手上有一台装了 Ubuntu 的机器——不管是老笔记本、公司发的开发本、还是自己攒的台式机——你希望它开机更快、响应更跟手、编译不卡顿、电池更耐用,那这篇内容就是写给你的。哪怕你只是刚装完系统的新手,只要你能打开终端、会复制粘贴命令,也能跟着一步步落地。

我先把核心观点摆出来:Ubuntu 的优化可以拆成五个层面——启动与内核、内存与交换、存储与文件系统、桌面与图形、电源与散热。这五层里,越靠底层,收益越大但风险也越高;越靠上层,感知越明显但天花板越低。一个合理的策略,是先摸清自己的瓶颈在哪一层,再决定动哪里,而不是无脑全上。

举个我自己的例子。我有一台 2016 年的老本子,4 核 i5、8G 内存、机械硬盘换成了 SATA 固态。刚装 Ubuntu 那会儿开机要一分半,我以为是内存不够,加了一堆 swap 调优,结果没啥用。后来用systemd-analyze blame一看,罪魁祸首是 NetworkManager-wait-online 和一个没用的打印服务,加起来占了 40 多秒。把这两个处理掉,开机直接进 25 秒。这件事让我彻底明白:优化的第一步永远是测量,不是动手。

所以下面我不会给你一个“一键优化脚本”,而是按层拆解,每一层告诉你:这一层在解决什么问题、什么情况下值得动、具体怎么操作、以及我踩过哪些坑。你可以把它当成一份决策地图,按需取用。

2. 第一层:启动与内核——把开机时间砍掉一半

2.1 先学会测量,别急着动手

在动任何启动项之前,你必须先知道时间花在哪了。Ubuntu 用的是 systemd,它自带了一套非常好用的分析工具,很多人却从来没用过。

打开终端,敲:

systemd-analyze

你会看到类似这样的输出:

Startup finished in 3.512s (firmware) + 4.203s (loader) + 6.871s (kernel) + 22.145s (userspace) = 36.731s graphical.target reached after 22.011s in userspace

这里要重点看两个数字:kernel 时间和userspace 时间。kernel 时间偏长(超过 8 秒),通常是硬件初始化或内核模块加载的问题;userspace 时间偏长(超过 15 秒),基本就是服务启动慢。

接着用这条命令看具体是哪些服务在拖后腿:

systemd-analyze blame | head -20

它会按耗时从高到低列出所有服务。我实测下来,新手机器上最常见的几个“时间大户”是:

  • NetworkManager-wait-online.service:等网络就绪,经常占 10 到 30 秒
  • apt-daily.service和apt-daily-upgrade.service:后台自动更新检查
  • snapd.service:如果你装了不少 snap 应用,这个会明显拖慢
  • plymouth-quit-wait.service:开机动画等待
  • 各种打印机、蓝牙、ModemManager 服务:没对应硬件却还在跑

注意:blame列出的时间有重叠,不能简单相加,它只是告诉你“谁在占用启动窗口”。真正的关键路径要用systemd-analyze critical-chain看。

systemd-analyze critical-chain

这条命令会画出一条依赖链,链上每一环都是串行等待的。优化关键路径上的服务,收益才最大。

2.2 该关的服务怎么关,关错了怎么救

找到目标之后,处理方式有三种,风险从低到高:

第一种,mask 掉(最彻底,推荐给确定不用的服务):

sudo systemctl mask NetworkManager-wait-online.service

mask 会把它链接到 /dev/null,任何东西都别想再拉起它。适合打印机、ModemManager 这种你压根没有硬件的服务。

第二种,disable 掉(保留手动启动能力):

sudo systemctl disable apt-daily.timer sudo systemctl disable apt-daily-upgrade.timer

适合自动更新这类你偶尔还想手动跑一次的服务。

第三种,改配置(最温和):

比如 NetworkManager-wait-online,如果你确实需要网络就绪,但不想等那么久,可以改它的超时:

sudo mkdir -p /etc/systemd/system/NetworkManager-wait-online.service.d/ sudo tee /etc/systemd/system/NetworkManager-wait-online.service.d/override.conf <<EOF [Service] ExecStart= ExecStart=/usr/bin/nm-online -s -q --timeout=5 EOF

这里ExecStart=先清空再重写是 systemd 的标准覆盖写法,很多人漏了第一行导致不生效,这是个高频坑。

关错了怎么办?别慌,Ubuntu 的恢复模式能救你。开机时按住 Shift(BIOS)或 Esc(UEFI)进 GRUB,选 Advanced options,进 recovery mode,然后选 root shell,执行:

systemctl unmask 服务名 systemctl enable 服务名

我个人的经验是:每次只动一个服务,重启验证,再动下一个。一次性关十个,出了问题你根本不知道是哪个。

2.3 内核参数调优:谨慎但有效

内核参数通过 GRUB 传递,编辑/etc/default/grub里的GRUB_CMDLINE_LINUX_DEFAULT。几个我实测有效且相对安全的参数:

  • quiet splash改成quiet:去掉开机动画,能省 1 到 2 秒,代价是开机变丑
  • mitigations=off:关闭 CPU 漏洞缓解,性能提升明显(尤其老 CPU),但有安全代价,只建议在完全隔离的内网机器或纯离线环境用
  • nowatchdog:关掉硬件看门狗,省一点点
  • transparent_hugepage=madvise:透明大页策略,对数据库类负载有影响,普通桌面可不动

改完必须执行:

sudo update-grub

提示:改内核参数前,先在 GRUB 菜单里按e临时编辑测试一次,确认能正常启动再写进配置文件。我见过太多人直接改文件,结果起不来只能进 live USB 救。

3. 第二层:内存与交换——别让 swap 拖垮你的响应

3.1 先搞清楚你的内存到底够不够

很多人一卡就怪内存,其实先要看数据。用free -h看总量和可用量,用vmstat 1看 swap 换入换出(si/so 两列)。如果 si/so 长期是 0,说明你根本没在换页,内存不是瓶颈,别瞎调。

真正需要关注 swap 的场景是:内存吃紧、系统开始频繁换页、桌面卡成幻灯片。这时候策略有两个方向——要么减少内存占用,要么优化 swap 行为。

3.2 swappiness 到底该设多少

vm.swappiness控制内核多积极地使用 swap,取值 0 到 100。默认值 Ubuntu 是 60。网上流传的说法是“设成 10 或 1 就对了”,但这是有前提的。

  • 如果你有16G 以上内存 + 固态硬盘:设成 10 是合理的,让系统尽量留在物理内存里
  • 如果你有8G 内存 + 机械硬盘:设成 60 甚至更高反而更好,因为机械盘随机读写慢,但顺序换页还能接受,硬扛内存不足会更卡
  • 如果你跑的是数据库或虚拟机:通常建议设成 1 到 10,避免关键数据被换出

临时改:

sudo sysctl vm.swappiness=10

永久改,写进/etc/sysctl.d/99-swap.conf:

vm.swappiness=10 vm.vfs_cache_pressure=50

vfs_cache_pressure控制内核回收 inode/dentry 缓存的倾向,默认 100,设成 50 让内核更愿意保留缓存,对频繁访问大量小文件的场景(比如前端 node_modules)有感知。

3.3 zram:小内存机器的救命稻草

如果你内存只有 4G 或 8G,又不想加内存条,zram 是我最推荐的方案。它的原理是在内存里划一块区域,用压缩算法当 swap 用。压缩比通常能到 2:1 甚至 3:1,等于凭空多出一倍内存。

安装和启用:

sudo apt install zram-tools

然后编辑/etc/default/zramswap:

ALGO=zstd PERCENT=50 PRIORITY=100

ALGO=zstd是我实测压缩率和速度平衡最好的算法,PERCENT=50表示拿一半内存做 zram。改完重启,用swapon --show确认。

我拿一台 4G 内存的老本子做过对比:不开 zram,开三个浏览器标签加一个编辑器就开始换页卡顿;开了 zram 之后,同样的负载下 swap 换页几乎感觉不到,因为压缩解压都在内存里完成,比读写磁盘快几个数量级。

注意:zram 会占用 CPU 做压缩,如果你 CPU 本身就很弱(比如双核赛扬),压缩开销可能反而拖慢。这种情况建议 PERCENT 设小一点,比如 25。

4. 第三层:存储与文件系统——被严重低估的性能来源

4.1 先确认你的盘是不是瓶颈

存储这一层,很多人直接忽略,但它往往是老机器最大的瓶颈。先用lsblk -d -o NAME,ROTA,MODEL看你的盘是不是机械盘(ROTA=1 就是机械)。如果是机械盘,换固态是收益最高的一笔投资,没有之一,比任何软件优化都立竿见影。

如果已经是固态,那还有优化空间。用sudo fstrim -av手动跑一次 TRIM,看看有没有效果。Ubuntu 默认会周期性跑 fstrim.timer,但有些机器上没启用:

sudo systemctl enable fstrim.timer sudo systemctl start fstrim.timer

4.2 挂载参数:noatime 和 discard 的取舍

编辑/etc/fstab,给根分区加上noatime:

UUID=xxxx / ext4 defaults,noatime,errors=remount-ro 0 1

noatime的意思是每次读文件不更新访问时间。默认的relatime已经比atime好很多,但noatime更彻底,对大量小文件读写的场景(编译、git 操作)有可感知的提升。

至于discard挂载选项,我不建议直接加在 fstab 里。原因是它会在每次删除文件时同步触发 TRIM,可能造成卡顿。更好的做法是用周期性的 fstrim.timer,前面已经说了。

4.3 文件系统选择:ext4 还是 btrfs

这是个老生常谈的问题。我的结论很简单:

场景推荐理由
普通桌面、开发机ext4成熟稳定,性能均衡,出问题好恢复
需要快照回滚btrfs内置快照,配合 timeshift 很香
老机械盘ext4btrfs 在机械盘上碎片化问题更明显
大容量数据盘xfs大文件吞吐好,但不好缩小

我自己的主力机用的是 ext4,因为稳定压倒一切。测试机用 btrfs 玩快照。别为了“新”而选 btrfs,除非你真的需要它的特性,这是我从一次 btrfs 崩溃恢复失败里学到的教训。

4.4 I/O 调度器:NVMe 和 SATA 不一样

Linux 有多种 I/O 调度器,不同盘适合不同的。查看当前:

cat /sys/block/nvme0n1/queue/scheduler
  • NVMe 固态:用none(也叫 noop),因为 NVMe 本身队列很深,内核调度反而添乱
  • SATA 固态:用mq-deadline或kyber
  • 机械盘:用bfq,对交互响应友好

临时改:

echo none | sudo tee /sys/block/nvme0n1/queue/scheduler

永久改要写 udev 规则,在/etc/udev/rules.d/60-ioschedulers.rules:

ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none" ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline" ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"

这套规则我用了好几年,覆盖了绝大多数情况。

5. 第四层:桌面与图形——感知最强的优化战场

5.1 桌面环境的选择:别硬扛 GNOME

Ubuntu 默认的 GNOME 功能全、生态好,但资源占用确实不低。如果你机器内存小于 8G,或者 CPU 是低压双核,换桌面环境是感知最明显的优化。

几个主流选择:

  • Xfce:轻量、稳定、可定制,内存占用约 300 到 400MB
  • KDE Plasma:功能丰富,近年优化很好,内存占用约 500 到 700MB
  • LXQt:极致轻量,内存占用约 200 到 300MB,但界面偏简陋
  • MATE:GNOME 2 的精神续作,中庸之选

安装 Xfce 很简单:

sudo apt install xubuntu-desktop

装完在登录界面右上角切换会话即可,不用卸载 GNOME,随时可以切回去。这是我最推荐的做法——保留选择权。

5.2 图形驱动:开源还是闭源

NVIDIA 显卡用户绕不开这个问题。我的经验是:

  • 日常办公、看视频:开源 nouveau 够用,省心
  • 游戏、CUDA、深度学习:必须装闭源驱动

装闭源驱动最稳的方式是用 Ubuntu 自带的工具:

ubuntu-drivers devices sudo ubuntu-drivers autoinstall

它会自动选推荐版本。装完重启,用nvidia-smi验证。

注意:装 NVIDIA 驱动前,先关掉 Secure Boot,否则驱动签名验证会失败,进不了图形界面。这个坑我踩过不止一次,尤其是新装的机器。

AMD 显卡用户就幸福多了,开源 amdgpu 驱动质量很高,基本不用折腾。

5.3 动画和特效:该关就关

GNOME 的动画在弱机上很拖后腿。可以用 GNOME Tweaks 关掉,或者直接命令行:

gsettings set org.gnome.desktop.interface enable-animations false

这一条命令,在低压 CPU 的机器上能明显感觉到窗口切换更跟手。

另外,如果你不用 Wayland 的某些特性,可以切回 X11。在登录界面点齿轮图标选 “Ubuntu on Xorg”。有些老显卡和输入法在 X11 下更稳定,这是实测结论。

5.4 字体渲染:小细节大体验

Ubuntu 默认字体渲染偏“糊”,尤其是高分屏。装 gnome-tweaks 后可以调:

sudo apt install gnome-tweaks

在 Fonts 里把 Hinting 设成 Slight,Antialiasing 设成 Subpixel(LCD 屏)或 Grayscale(高分屏)。再配合安装fonts-noto-cjk和fonts-wqy-microhei,中文显示会舒服很多。这些不是性能优化,但直接影响你每天盯着屏幕的体验,我觉得值得单独提一句。

6. 第五层:电源与散热——笔记本用户的必修课

6.1 TLP:笔记本续航的标配

台式机可以跳过这节,笔记本用户强烈建议装 TLP:

sudo apt install tlp tlp-rdw sudo systemctl enable tlp sudo systemctl start tlp

TLP 会自动根据电源状态(插电/电池)调整 CPU 频率、硬盘、USB 等设备的功耗策略。装完用sudo tlp-stat -s看状态,sudo tlp-stat -b看电池信息。

我实测下来,一台老 ThinkPad 装 TLP 后,电池续航从 3 小时出头提升到接近 5 小时,效果非常明显。

6.2 CPU 调频器:performance 还是 powersave

查看当前调频器:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

常见的有:

  • performance:一直跑最高频,性能最好但费电发热
  • powersave:省电优先,但可能降频太狠导致卡顿
  • schedutil:内核调度器驱动,动态调整,现代内核的推荐选择
  • ondemand:老牌动态调频,响应稍慢

我一般用schedutil,兼顾响应和功耗。临时改:

echo schedutil | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

永久改可以写进 TLP 配置或 systemd 服务。

6.3 散热与降频:别让温度毁了性能

笔记本用久了,散热硅脂老化、风扇积灰,会导致 CPU 温度墙提前触发,性能断崖式下跌。用sensors看温度:

sudo apt install lm-sensors sudo sensors-detect sensors

如果待机就 70 度以上,基本可以确定是散热问题,软件优化救不了,得清灰换硅脂。这是硬件层面的,但我想强调:很多人花大量时间调软件,却忽略了物理散热这个根本瓶颈。

软件层面能做的,是确保风扇策略正常。有些笔记本需要装thermald:

sudo apt install thermald sudo systemctl enable thermald

它会根据温度主动调节,避免过热降频。

7. 常见问题与排查技巧实录

优化过程中遇到的问题,我整理成一张速查表,方便你对号入座:

现象可能原因排查命令解决方向
开机特别慢某服务卡住systemd-analyze blamemask/disable 对应服务
系统越用越卡内存泄漏或 swap 频繁free -h、vmstat 1查进程、调 swappiness、上 zram
磁盘读写慢机械盘或调度器不当lsblk -d -o NAME,ROTA换固态、调 I/O 调度器
图形界面卡顿驱动问题或动画过多glxinfo | grep renderer装正确驱动、关动画
笔记本发热严重散热老化或调频不当sensors清灰、装 TLP、调 governor
改完配置起不来配置错误进 recovery mode撤销改动、逐项排查

几个我踩过的具体坑,单独说一下:

坑一:mask 了不该 mask 的服务。有次我把systemd-logind给 mask 了,结果登录界面直接进不去。教训是:动服务前先查它是干什么的,用systemctl cat 服务名看它的描述和依赖。

坑二:swappiness 设成 0。网上有人说设 0 最好,结果我设了之后,内存一满系统直接 OOM 杀进程,比换页还惨。swappiness=0 不等于禁用 swap,它只是让内核在内存快满时才用 swap,反而容易触发 OOM。设 1 到 10 是安全区间。

坑三:fstab 写错导致进不了系统。改 fstab 一定要用sudo mount -a先测试,没报错再重启。我见过太多人直接改完重启,结果卡在 emergency mode。

坑四:盲目跟风“一键优化脚本”。网上很多脚本会一次性改几十项,你根本不知道它改了什么。出了问题无从排查。我的原则是:每一处改动都要能说清楚为什么,说不清就不改。

8. 一套可复现的完整优化流程

把前面五层串起来,我给一套我常用的流程,你可以照着走一遍:

  1. 测量阶段:systemd-analyze、free -h、lsblk、sensors,把基线数据记下来
  2. 启动优化:处理blame里排名靠前且确认无用的服务,每次一个,重启验证
  3. 内存优化:内存小于 8G 上 zram,大于 8G 调 swappiness 到 10
  4. 存储优化:确认固态、启用 fstrim.timer、加 noatime、按盘型设 I/O 调度器
  5. 桌面优化:弱机换 Xfce、关动画、装正确显卡驱动、调字体
  6. 电源优化:笔记本装 TLP 和 thermald,调 governor 到 schedutil
  7. 复测阶段:重新跑一遍测量命令,对比基线,确认收益

这套流程的核心逻辑是先测后调、逐项验证、保留退路。我一般会花一个下午做完,然后观察一周,确认稳定后再固化到配置里。

最后分享一个我个人的小习惯:每次做重大改动前,用timeshift建一个快照。Ubuntu 上装 timeshift 很简单:

sudo apt install timeshift

配置好之后,出问题一键回滚,比任何手动恢复都快。这个习惯救过我好几次,尤其是折腾显卡驱动和内核参数的时候。

优化这件事,说到底是个不断迭代的过程。硬件在变、软件在变、你的使用场景也在变,没有一劳永逸的方案。我现在的做法是每半年重新测一次基线,看看有没有新的瓶颈出现。这套策略框架,你可以直接用,也可以按自己的情况调整——关键是理解每一层在解决什么问题,而不是记住一堆命令。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询