一、先搞懂 Ubuntu 为啥卡

很多人用 Ubuntu 时间长了都会遇到卡的问题,可能是打开浏览器慢、终端输命令卡半天才反应,甚至拖动窗口都掉帧。其实 Ubuntu 卡的原因和 Windows、Mac 差不多,要么是资源被占满,要么是系统本身的小问题,不用觉得是 Linux 就很复杂。

先给大家说个判断卡的核心方法:先看系统资源占用。如果 CPU、内存、磁盘读写这三个指标里有一个长时间跑满,那卡就是必然的。比如内存只剩几百兆,系统就会把不常用的程序数据挪到硬盘的虚拟内存里,硬盘读写速度比内存慢几十倍,自然就卡。

给大家说个快速看资源的命令,技术栈统一用 Shell(Ubuntu 自带的命令行):

# 查看实时资源占用,按q退出
top

这个命令会显示所有运行的程序,第一行是系统整体情况,第三行是 CPU 占用,第四行是内存占用。比如内存行的“used”如果接近“total”,那就是内存不够;CPU 行的“us”(用户进程占用)如果超过 90%,就是 CPU 被占满。

还有个更直观的命令,看哪个程序占资源最多:

# 按内存占用排序显示进程,按q退出
ps aux --sort=-%mem | head -10

这个命令会把占内存最多的前 10 个程序列出来,比如你开了好几个浏览器标签页,可能浏览器进程占了 2G 内存,这就是卡的根源。

1.1 常见的卡的具体场景

我接触过很多用户的问题,整理了几个最常见的场景: 第一种是开机卡,刚进桌面要等好几分钟才能操作,大概率是开机自启的程序太多,比如自动同步的网盘、后台跑的开发环境; 第二种是用的时候突然卡,比如开了大型 IDE(像 VS Code、IntelliJ)同时开了好几个大项目,内存直接被占满; 第三种是卡了之后重启又好,但过几天又卡,这种一般是内存泄漏,某个程序跑久了会偷偷占越来越多内存,直到系统扛不住。

二、解决卡的第一步:清理占资源的程序

找到占资源的程序后,先把没用的关掉,这是最直接的办法。比如你开了一个没在用的虚拟机、一个跑了很久的下载任务,直接关掉就能释放资源。

给大家说个强制关程序的命令,适合那种卡到点不动、关不掉的程序,技术栈还是 Shell:

# 先找要关的程序的PID(进程ID),比如找Chrome的PID
ps aux | grep chrome
# 假设找到的PID是1234,强制杀掉这个进程
kill -9 1234

这里要注意,kill -9 是强制杀,不管程序有没有保存数据,所以先尽量用正常的关闭方式,比如点窗口的叉号,实在关不掉再用这个命令。

2.1 优化开机自启程序

开机自启的程序多了,不仅开机卡,还会一直在后台占资源。Ubuntu 有两种管理自启的方式,一种是图形界面,适合新手;一种是命令行,适合喜欢用终端的人。

先给大家说图形界面的操作:打开“设置”,找到“应用程序”里的“启动应用程序”,就能看到所有开机自启的程序,把没用的(比如你不需要开机就自动开的音乐软件、网盘)关掉就行。

命令行的方式更精准,能管理一些图形界面看不到的自启项,技术栈 Shell:

# 查看所有开机自启的服务
systemctl list-unit-files | grep enabled
# 关掉某个自启服务,比如关掉一个没用的打印服务
systemctl disable cups.service
# 关掉后还要停止已经在运行的这个服务
systemctl stop cups.service

这里要注意,systemctl 管理的是系统服务,比如打印服务、网络服务,不要随便关掉重要的服务,比如 network.service(网络服务)、ssh.service(远程连接服务),不然会出问题。

三、升级硬件相关的系统配置

如果清理程序后还是卡,可能是系统配置和硬件不匹配,比如内存不够用,或者硬盘是旧的机械硬盘,读写速度慢。

3.1 调整虚拟内存(Swap)的大小

虚拟内存是系统把硬盘的一部分空间当内存用的区域,当物理内存不够时,系统会把不常用的数据放到这里。如果你的内存小于 4G,虚拟内存设小了就容易卡。

给大家说个调整虚拟内存的方法,技术栈 Shell:

# 先查看当前的虚拟内存大小
free -h
# 先关掉已有的虚拟内存
sudo swapoff -a
# 重新创建一个 4G 的虚拟内存文件(适合内存4G的电脑)
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
# 给虚拟内存文件设置权限,只有root能读写,避免安全问题
sudo chmod 600 /swapfile
# 把这个文件格式化为虚拟内存格式
sudo mkswap /swapfile
# 启用这个虚拟内存
sudo swapon /swapfile
# 把虚拟内存设置写入系统配置,开机自动生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

这里的 bs=1G count=4 就是创建 4G 的虚拟内存,如果你内存是 2G,就设成 2G(bs=1G count=2),内存 8G 以上的话,虚拟内存设成 2G 就够了,不用太大,因为虚拟内存是硬盘,太大占空间。

3.2 优化硬盘读写速度

如果你的硬盘是机械硬盘(HDD),读写速度慢是天生的,能优化的空间不大,但可以调整系统的读写模式,减少不必要的读写。比如把系统的日志级别调低,避免系统一直写日志占硬盘。

技术栈 Shell:

# 打开系统日志配置文件
sudo nano /etc/systemd/journald.conf
# 找到这一行,把#去掉,改成
SystemMaxUse=50M
# 按Ctrl+O保存,按Enter确认,按Ctrl+X退出
# 重启日志服务生效
sudo systemctl restart systemd-journald

原来的 SystemMaxUse 可能是 1G 甚至更大,改成 50M 后,系统日志最多占 50M 空间,不会一直写日志占硬盘。

如果你的硬盘是固态硬盘(SSD),要开启 TRIM 功能,这个功能能清理 SSD 里没用的数据,提高读写速度,延长硬盘寿命:

# 查看TRIM功能是否开启
systemctl status fstrim.timer
# 如果显示disabled,就开启
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer

四、优化桌面环境和系统本身

Ubuntu 默认的桌面环境是 GNOME,这个桌面很美观,但也比较占资源,如果你的电脑配置低(比如内存小于 4G,CPU 是双核以下),用 GNOME 就容易卡。

4.1 更换轻量桌面环境

给大家推荐几个轻量的桌面环境,比如 Xfce、LXDE,这些桌面占的内存只有 GNOME 的一半甚至更少,适合低配电脑。

安装 Xfce 的命令,技术栈 Shell:

# 安装Xfce桌面环境
sudo apt update
sudo apt install xfce4
# 安装完成后重启电脑,登录时选择Xfce会话

安装后重启,登录界面会有个“会话”的选项,选“Xfce Session”,登录后就是轻量的桌面环境了,速度会快很多。

4.2 清理系统垃圾和旧内核

Ubuntu 用久了会产生很多垃圾文件,比如旧的安装包、旧的内核版本,这些都会占硬盘空间,影响系统速度。

清理旧安装包的命令,技术栈 Shell:

# 清理系统里没用的安装包(比如安装程序后剩下的deb包)
sudo apt clean
# 清理系统里没用的依赖包(比如程序卸载后剩下的依赖)
sudo apt autoremove

清理旧内核的命令要注意,不能随便删正在用的内核,不然会开不了机:

# 查看当前正在用的内核
uname -r
# 查看所有已安装的内核
dpkg --list | grep linux-image
# 假设当前用的内核是5.15.0-78-generic,删掉旧的内核(比如5.15.0-70-generic)
sudo apt remove --purge linux-image-5.15.0-70-generic
sudo apt remove --purge linux-headers-5.15.0-70-generic
# 清理完成后更新系统引导
sudo update-grub

这里一定要确认旧内核的版本号,不要删错,删错正在用的内核会导致系统无法启动。

五、解决卡的进阶方法:排查深层问题

如果上面的方法都试了还是卡,可能是系统的深层问题,比如驱动不兼容、系统配置损坏。

5.1 检查驱动是否正常

Ubuntu 对硬件的驱动支持很好,但有些小众硬件(比如一些笔记本的显卡、声卡)的驱动可能有问题,导致系统卡。

检查驱动的命令,技术栈 Shell:

# 打开驱动管理器,查看有没有需要安装的驱动
ubuntu-drivers autoinstall

这个命令会自动检测你的硬件,安装适合的驱动,比如显卡驱动,安装完成后重启电脑生效。

5.2 修复系统文件

如果系统的核心文件损坏,也会导致系统卡,Ubuntu 有个修复系统的命令,能检查并修复损坏的系统文件:

# 修复系统文件,需要用root权限
sudo apt install --reinstall ubuntu-desktop
# 这个命令会重新安装Ubuntu的桌面环境和核心系统文件,修复损坏的部分

这个命令不会删除你的个人文件,只是修复系统文件,所以不用担心数据丢失。

六、相关技术的详细分析

6.1 应用场景

上面说的这些方法,适用的场景不一样:

  • 清理程序、优化开机自启,适合所有卡的场景,尤其是临时卡、突然卡的情况;
  • 调整虚拟内存、优化硬盘,适合内存小、硬盘慢的电脑,比如旧笔记本、低配台式机;
  • 更换轻量桌面、清理旧内核,适合长期卡、系统用了很久的情况;
  • 检查驱动、修复系统,适合其他方法都没用的深层问题。

6.2 技术优缺点

  • Shell 命令:优点是速度快、功能强,适合批量操作;缺点是要记命令,新手容易出错,比如删错内核、强制杀进程导致数据丢失;
  • 虚拟内存调整:优点是不用加硬件,就能解决内存不够的问题;缺点是虚拟内存的速度比物理内存慢,设太大占硬盘空间;
  • 轻量桌面:优点是占用资源少,速度快;缺点是美观度不如 GNOME,功能也少一些,比如一些高级的桌面特效没有;
  • 驱动安装:优点是能解决硬件不兼容的问题;缺点是有些小众硬件的驱动很难找,甚至没有 Linux 版的驱动。

6.3 注意事项

  • 所有需要 root 权限的命令(带 sudo 的),一定要确认命令的作用,不要随便复制网上的命令,不然可能会损坏系统;
  • 调整虚拟内存、清理旧内核的时候,一定要备份重要数据,万一操作失误,数据丢了就麻烦了;
  • 更换桌面环境的时候,要先确认自己的电脑配置确实需要,不然换了之后功能不够用,还要换回来;
  • 强制杀进程的时候,一定要先保存数据,不然未保存的文件会丢失。

七、文章总结

Ubuntu 系统的卡顿问题,本质上和其他操作系统的卡顿原因差不多,核心都是资源占用过高、配置不匹配、系统问题这几类。解决的思路也很简单:先找原因(看资源占用),再解决(清理程序、优化配置、升级桌面),最后排查深层问题(驱动、系统文件)。

对于新手来说,先从简单的方法入手,比如清理程序、优化开机自启,再尝试调整虚拟内存、更换桌面,最后再考虑深层排查。不要一开始就用复杂的命令,避免操作失误。

另外,平时用 Ubuntu 的时候,也要注意维护,比如定期清理垃圾、不要开太多没用的程序、及时更新系统,这样能减少卡的概率。