1. 为什么“系统优化”这件事值得认真对待
很多人第一次接触Linux,都是从某个长期支持版本开始的。装完之后觉得能用,就再也没动过默认配置。直到某天发现开机要等一分多钟、硬盘灯狂闪、风扇呼呼转、终端敲个命令都要卡半秒,才意识到“能用”和“好用”之间隔着一条不小的鸿沟。
这篇内容聊的就是这条鸿沟怎么填。核心关键词是系统优化策略,具体到操作层面,涉及启动项管理、内存与交换分区调优、磁盘I/O调度、文件系统挂载参数、后台服务精简、内核参数微调、软件源加速、日志与缓存治理等一整套动作。它解决的问题很直接:让一台跑了一段时间的机器重新变得利索,让新装的机器从一开始就走在一条更合理的配置路径上。
适合谁看?如果你手头有一台用来做开发、跑服务、做数据处理或者日常办公的Linux机器,不管是物理机还是虚拟机,这套思路都能用。新手可以照着步骤走,老手可以挑自己关心的章节看。我不打算写成一份“万能脚本一键优化”的爽文,因为那种东西在不同硬件、不同用途下翻车的概率极高。我更想讲清楚每个动作背后的逻辑,让你知道为什么这么调、什么情况下不该这么调。
整篇内容基于一个基本判断:优化不是堆参数,而是做减法加做匹配。减掉不需要的东西,匹配你的实际使用场景。下面从整体思路开始拆。
2. 整体优化思路与方案选型
2.1 先搞清楚“优化”的目标是什么
在动手之前,必须先回答一个问题:这台机器主要用来干什么?用途不同,优化方向完全相反。
- 如果是开发工作站,重点是编译速度、内存充足、磁盘读写快,可以牺牲一些后台服务的精简度,保留必要的开发工具链。
- 如果是长期运行的服务节点,重点是稳定性、低内存占用、日志可控,桌面环境、蓝牙、打印服务这些统统可以砍掉。
- 如果是虚拟机里的测试环境,重点是启动快、快照小,交换分区可以调小甚至不设,但要注意内存分配。
- 如果是老旧硬件复活,重点是轻量化,换更轻的桌面环境、关掉视觉效果、用更省资源的文件系统。
我见过不少人上来就抄一份“十大优化技巧”,结果把服务节点上的日志服务关了,出问题查不到记录;或者把开发机上的交换分区关了,编译大项目时直接OOM。所以第一步不是敲命令,而是拿张纸写下这台机器的三个关键词:用途、硬件瓶颈、可接受的风险。
2.2 优化的四个层次
我把系统优化分成四个层次,从外到内依次是:
- 启动层:开机到进入可用状态这段时间里,哪些东西在拖后腿。
- 运行层:系统跑起来之后,内存、CPU、磁盘、网络怎么分配。
- 存储层:文件系统、挂载参数、I/O调度、缓存策略。
- 内核层:内核参数、模块加载、电源管理。
这四个层次不是孤立的。比如你调整了I/O调度器,可能会影响启动速度;你精简了后台服务,可能会释放内存让缓存更充裕。所以实际操作时,建议按“启动层→运行层→存储层→内核层”的顺序来,每做完一层观察一下效果,不要一次性全改完,否则出了问题很难定位是哪个改动导致的。
2.3 工具选型:用系统自带的,还是装第三方
网上有很多“优化脚本”和“优化工具”,我的建议是:优先用系统自带的工具,第三方工具只在明确知道它做了什么的前提下使用。
系统自带的工具包括:
systemd-analyze:分析启动耗时。systemctl:管理服务。journalctl:查看日志。top/htop/atop:看资源占用。iostat/iotop:看磁盘I/O。free/vmstat:看内存和虚拟内存。sysctl:查看和修改内核参数。tune2fs/xfs_admin:调整文件系统参数。
这些工具的好处是透明、可控、可回滚。第三方“一键优化”脚本的问题在于,它往往针对的是作者自己的机器和使用场景,换到你这里可能适得其反。而且很多脚本会修改你不熟悉的配置,出了问题连查都不知道从哪查。
提示:如果你确实想用某个优化脚本,先在虚拟机里跑一遍,对比优化前后的启动时间、内存占用、磁盘I/O,确认没有副作用再上生产环境。
2.4 一个重要的心态:优化是持续过程,不是一次性任务
系统优化不是“做完就完了”。硬件会老化,软件会更新,使用习惯会变化。今天合理的配置,半年后可能就不合适了。所以我的做法是:每次做完一轮优化,记录下改动内容和前后对比数据,过一两个月再回头看,根据新的使用情况微调。
这个记录不需要很复杂,一个文本文件就行,写上日期、改了什么、为什么改、改完效果如何。时间长了,这就是你自己机器的“优化档案”,比任何通用教程都值钱。
3. 启动层优化:把开机时间砍下来
3.1 用systemd-analyze定位启动瓶颈
开机慢,先别急着关服务,先看时间花在哪了。三条命令足够:
# 看整体启动耗时 systemd-analyze # 看每个服务的启动耗时,按时间排序 systemd-analyze blame # 看启动过程中的关键路径 systemd-analyze critical-chainsystemd-analyze的输出会告诉你firmware、loader、kernel、userspace各花了多少时间。如果userspace占了大头,说明是服务启动慢;如果kernel时间长,可能是硬件初始化或驱动问题。
systemd-analyze blame会列出一个按耗时排序的服务列表。我见过一台机器上NetworkManager-wait-online.service花了30多秒,原因是网络配置有问题导致等待超时。这种服务如果不需要,可以直接禁用。
systemd-analyze critical-chain展示的是关键路径,也就是真正决定开机时间的那个链条。有些服务虽然自己耗时长,但不在关键路径上,禁用了也省不了时间。
3.2 哪些服务可以安全禁用
禁用服务的原则是:你明确知道它没用,或者你有替代方案。下面这些是常见的可以考虑禁用的服务,但要根据实际情况判断:
| 服务名 | 作用 | 什么情况下可以禁用 |
|---|---|---|
NetworkManager-wait-online.service | 等待网络就绪 | 不依赖网络启动的场景 |
bluetooth.service | 蓝牙支持 | 没有蓝牙设备或不用蓝牙 |
cups.service | 打印服务 | 不接打印机 |
avahi-daemon.service | 局域网设备发现 | 不需要mDNS/DNS-SD |
ModemManager.service | 移动宽带管理 | 没有蜂窝网卡 |
snapd.service | Snap包管理 | 不用Snap包 |
apt-daily.service | 自动更新检查 | 手动控制更新时机 |
motd-news.service | 登录消息 | 不需要新闻推送 |
禁用命令:
# 停止并禁用 sudo systemctl disable --now 服务名 # 如果只是想临时停止,不禁用 sudo systemctl stop 服务名注意:禁用
apt-daily相关服务后,记得手动定期更新,否则会错过安全补丁。我一般会保留apt-daily.timer但把触发时间改到凌晨,避免开机时抢I/O。
3.3 调整服务启动顺序和依赖
有些服务不是“没用”,而是“启动太早”或“等待太久”。比如网络相关的服务,如果配置了DHCP,可能会等待租约超时。这时候可以调整配置,减少等待时间。
以NetworkManager-wait-online为例,如果确实需要网络就绪,但不想等太久,可以修改超时时间:
# 编辑服务配置 sudo systemctl edit NetworkManager-wait-online.service # 在打开的编辑器中添加 [Service] ExecStart= ExecStart=/usr/bin/nm-online -s -q -t 10这里的-t 10表示最多等10秒,而不是默认的30秒或更长。
另一个常见问题是服务之间的依赖关系不合理。比如某个服务明明不依赖数据库,却配置了After=mysql.service,导致数据库启动慢时它也跟着慢。这种情况可以用systemctl list-dependencies查看依赖树,找到不合理的依赖并调整。
3.4 启动层优化的实操心得
我自己的习惯是,每台机器装完后先跑一次systemd-analyze blame,把耗时前10的服务记下来,逐个判断是否必要。有一次发现一个fwupd.service(固件更新服务)花了8秒,而这台机器是虚拟机,根本不需要固件更新,直接禁用后开机快了近10秒。
还有一个坑:不要盲目禁用systemd-journald。有人为了省内存把它关了,结果日志全丢,出问题没法查。正确的做法是限制日志大小,而不是禁用日志服务。这个在后面的日志治理章节会细说。
另外,如果你用的是机械硬盘,开机慢可能是磁盘本身的问题,这时候优化服务效果有限,换SSD才是根本解法。优化要认清硬件天花板,不要在不该花时间的地方死磕。
4. 运行层优化:内存、CPU与后台进程
4.1 内存管理:别让缓存背锅
很多人看free -h发现“可用内存”很少,就以为内存不够。其实Linux的内存管理逻辑是:空闲内存用来做缓存,缓存不够时才回收。所以真正要看的是available那一列,而不是free。
free -h # 关注 available 列,它表示在不使用交换分区的情况下,还能给新进程多少内存如果available长期低于总内存的10%,才需要考虑加内存或优化内存占用。优化方向包括:
- 减少后台服务数量。
- 调整应用的内存配置(比如数据库的缓存大小)。
- 使用更轻量的替代品(比如用
nginx替代apache,用sqlite替代mysql做轻量场景)。
4.2 交换分区:设多大、怎么设
交换分区(swap)的大小没有统一标准,但有几个经验值:
| 物理内存 | 建议swap大小 | 说明 |
|---|---|---|
| ≤2GB | 2倍内存 | 内存紧张,需要swap兜底 |
| 2-8GB | 等于内存 | 平衡性能和空间 |
| 8-64GB | 4-8GB | 内存充足,swap只做应急 |
| >64GB | 可选,或设小 | 主要看是否需要休眠功能 |
但比大小更重要的是swappiness参数。它控制内核多积极地使用swap,取值范围0-100,默认通常是60。对于桌面和开发机,我一般调到10;对于服务器,调到1甚至0(但不要完全关,除非你确定不会OOM)。
# 临时调整 sudo sysctl vm.swappiness=10 # 永久生效 echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf注意:
swappiness=0并不意味着完全不用swap,只是尽可能不用。在内存极度紧张时,内核仍然可能使用swap,否则会触发OOM Killer。
另外,如果用的是SSD,可以考虑用zram或zswap来压缩内存,减少对磁盘swap的依赖。zram是把一部分内存当作压缩的块设备来用,zswap是在写入磁盘swap之前先压缩。两者都能有效减少swap I/O,对老旧机器效果明显。
4.3 CPU调度:别让一个进程吃满所有核心
Linux默认的CPU调度器是CFS(完全公平调度器),对大多数场景够用。但有些情况下可以调整:
- 实时性要求高的任务:可以用
chrt设置实时调度策略,但要小心,设置不当会导致系统卡死。 - 长时间计算任务:可以用
nice和renice调整优先级,让后台任务不抢占前台交互。 - 多核负载均衡:可以用
taskset把进程绑定到特定核心,减少缓存失效。
我自己的做法是,对于编译、渲染这类吃CPU的任务,用nice -n 10降低优先级,这样在跑任务的同时还能正常操作桌面。对于需要低延迟的音频处理,用chrt -f 50设置实时优先级,但只给必要的进程。
4.4 后台进程治理:找出“隐形消耗者”
有些进程平时不显眼,但长期占用资源。用下面几条命令可以揪出来:
# 按内存占用排序 ps aux --sort=-%mem | head -20 # 按CPU占用排序 ps aux --sort=-%cpu | head -20 # 查看所有systemd用户服务 systemctl --user list-units --type=service # 查看定时任务 systemctl list-timers常见的“隐形消耗者”包括:
- 自动更新检查(
apt-daily、snapd)。 - 索引服务(
tracker、baloo)。 - 云同步客户端(各种网盘、笔记软件)。
- 浏览器后台标签页(Chrome的每个标签都是一个进程)。
对于这些,我的策略是:能关就关,不能关就限制。比如tracker可以配置只索引特定目录,或者干脆禁用,需要搜索时用find和grep。浏览器可以装插件限制后台标签页的资源占用。
4.5 运行层优化的实操心得
有一次帮人看一台“越用越慢”的开发机,free显示内存充足,top也没发现异常进程。后来用iotop发现有个后台进程在持续小量写磁盘,是某个笔记软件的同步服务。它不占CPU也不占内存,但频繁的磁盘写入导致I/O等待升高,拖慢了整个系统。禁用同步服务后,系统响应明显变快。
这个经历告诉我:优化不能只看CPU和内存,I/O往往是更隐蔽的瓶颈。尤其是机械硬盘时代,随机小写入的代价很高。即使是SSD,频繁写入也会影响寿命和性能。
5. 存储层优化:文件系统与I/O调度
5.1 文件系统选择:ext4、xfs还是btrfs
这三个是Linux上最常见的文件系统,各有适用场景:
| 文件系统 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| ext4 | 稳定、兼容性好、工具成熟 | 不支持快照、校验和 | 通用场景、老硬件 |
| xfs | 大文件性能好、支持在线扩容 | 不支持缩小、小文件性能一般 | 服务器、大容量存储 |
| btrfs | 支持快照、校验和、压缩 | 稳定性争议、RAID5/6不推荐 | 需要快照和回滚的场景 |
我的选择逻辑是:桌面和开发机用ext4,服务器用xfs,需要快照的实验环境用btrfs。ext4最省心,出了问题恢复工具多;xfs在大文件读写上确实有优势;btrfs的快照功能对于“折腾前先备份”很有用,但不要用它做RAID5/6。
5.2 挂载参数:几个关键选项
挂载参数对性能和数据安全影响很大。以ext4为例,/etc/fstab里常见的优化参数:
# 普通分区 UUID=xxx / ext4 defaults,noatime,discard 0 1 # 数据分区,更注重性能 UUID=yyy /data ext4 defaults,noatime,data=writeback 0 2逐个解释:
noatime:不记录文件访问时间。这个参数能显著减少写入,尤其是读多写少的场景。代价是ls -lu看不到准确的访问时间,但大多数人不关心这个。discard:对SSD启用TRIM。但更好的做法是用fstrim.timer定期执行,而不是每次删除都TRIM,因为频繁TRIM可能影响性能。data=writeback:ext4的数据写入模式。默认是ordered,writeback性能更好但崩溃时可能丢数据。只建议在数据可重建的分区上使用。commit=60:减少日志提交频率,默认5秒。调大能减少写入,但崩溃时丢失的数据窗口更大。
注意:修改挂载参数后,用
mount -o remount重新挂载或重启生效。改之前确认你知道每个参数的含义,尤其是涉及数据安全的参数。
5.3 I/O调度器:SSD和HDD用不同的
Linux的I/O调度器决定请求怎么排队和合并。常见的调度器:
mq-deadline:多队列版本,适合大多数场景,尤其是SSD。bfq:注重公平性和低延迟,适合桌面交互。kyber:低延迟,适合快速设备。none:不调度,直接交给设备,适合高性能NVMe。
查看和修改:
# 查看当前调度器 cat /sys/block/sda/queue/scheduler # 临时修改 echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler # 永久修改,在/etc/default/grub的GRUB_CMDLINE_LINUX中添加 # elevator=mq-deadline # 然后更新grub sudo update-grub我的经验是:NVMe用none,SATA SSD用mq-deadline,机械硬盘用bfq。桌面环境用bfq能明显改善交互响应,服务器用mq-deadline更稳。
5.4 磁盘缓存与预读
内核会用空闲内存做磁盘缓存,这是好事,不要手动去“释放缓存”。但可以调整预读大小:
# 查看当前预读值(单位:512字节扇区) cat /sys/block/sda/queue/read_ahead_kb # 调整,SSD可以设小一点,HDD设大一点 echo 128 | sudo tee /sys/block/sda/queue/read_ahead_kb预读太大浪费内存和带宽,太小影响顺序读性能。默认值通常够用,只有在特定工作负载下才需要调。
5.5 存储层优化的实操心得
我曾经把一台老笔记本的机械硬盘换成SSD,但没改挂载参数,结果感觉提升有限。后来加上noatime和discard,并启用fstrim.timer,开机和打开大文件的速度明显改善。这说明硬件升级和软件配置要配套,只换硬件不改配置,可能只发挥了一半性能。
另一个坑是data=writeback。我在一台测试机上用了这个参数,结果一次意外断电后,数据库文件损坏。虽然测试数据不重要,但让我意识到:性能优化不能以牺牲数据安全为代价,除非你明确知道数据可以重建。生产环境我永远用默认的ordered模式。
6. 内核层优化:参数微调与模块管理
6.1 sysctl参数:哪些值得调
/etc/sysctl.conf和/etc/sysctl.d/下的文件控制内核参数。下面这些是我通常会调整的:
# 减少swap使用 vm.swappiness=10 # 减少脏页缓存,降低I/O峰值 vm.dirty_ratio=10 vm.dirty_background_ratio=5 # 提高文件句柄上限 fs.file-max=100000 # 网络相关,减少TIME_WAIT占用 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_tw_reuse=1 # 提高本地端口范围 net.ipv4.ip_local_port_range=1024 65000逐个解释:
vm.dirty_ratio和vm.dirty_background_ratio:控制脏页占内存的比例。默认值较高(20%和10%),在内存大的机器上会导致一次性写入大量数据,造成I/O尖峰。调低能让写入更平滑。fs.file-max:系统级文件句柄上限。如果跑数据库或大量并发连接,需要调高。tcp_fin_timeout和tcp_tw_reuse:减少TIME_WAIT状态的连接占用。对高并发服务器有用,桌面机影响不大。
注意:
tcp_tw_reuse在某些场景下可能导致NAT问题,如果机器在NAT后面,谨慎使用。
6.2 内核模块:黑名单不用的驱动
有些内核模块会自动加载,但你的硬件根本用不上。比如:
pcspkr:主板蜂鸣器,吵人。floppy:软驱,早没了。bluetooth:不用蓝牙。snd_pcsp:PC扬声器。
把这些加入黑名单:
# 创建黑名单文件 echo "blacklist pcspkr" | sudo tee /etc/modprobe.d/blacklist.conf echo "blacklist floppy" | sudo tee -a /etc/modprobe.d/blacklist.conf # 更新initramfs sudo update-initramfs -u这样能减少启动时的模块加载,也能避免一些不必要的硬件探测。
6.3 电源管理:笔记本和台式机不同
笔记本上,电源管理直接影响续航和发热。tlp是一个常用的电源管理工具,但也可以手动配置:
# 查看当前电源管理状态 sudo tlp-stat -s # 或者用powertop查看耗电大户 sudo powertop对于台式机,电源管理不是重点,但可以启用cpufreq的powersave或schedutil调速器,在性能和功耗之间平衡。
6.4 内核层优化的实操心得
内核参数调整是最容易“翻车”的地方,因为很多参数之间有关联。我的原则是:一次只改一个参数,改完观察至少一天。有一次我同时改了swappiness、dirty_ratio和vfs_cache_pressure,结果系统变得很卡,但不知道是哪个参数导致的。后来逐个回滚才找到是vfs_cache_pressure设得太高,导致缓存被过度回收。
另一个经验是:不要迷信网上的“优化参数大全”。很多参数是针对特定内核版本和特定硬件的,换个环境可能完全相反。比如tcp_tw_recycle在较新的内核里已经被移除,因为它在NAT环境下会导致连接问题。用之前先查内核文档,确认参数还存在且适用。
7. 常见问题与排查技巧实录
7.1 优化后系统反而变慢了,怎么排查
这是最常见的问题。排查思路是回滚最近的改动,逐个排除:
- 如果改了内核参数,先恢复默认值,重启观察。
- 如果禁用了服务,先启用最近禁用的那个,重启观察。
- 如果改了挂载参数,先改回
defaults,重新挂载观察。 - 如果换了I/O调度器,先改回默认,观察。
如果记不清改了什么,可以对比/etc下的配置文件修改时间:
# 找出最近修改的配置文件 find /etc -type f -mtime -7 -name "*.conf" | xargs ls -lt7.2 开机卡在某个服务,怎么跳过
有时候某个服务启动失败会卡住整个启动过程。可以在启动时进入恢复模式,或者在内核命令行加systemd.mask=服务名临时屏蔽。
如果已经卡住了,按Ctrl+Alt+F2切换到其他终端,登录后:
# 查看哪个服务卡住了 systemctl list-jobs # 强制结束卡住的服务 sudo systemctl stop 服务名7.3 内存充足但系统卡顿,可能是什么原因
内存充足但卡顿,常见原因有:
- I/O等待高:用
iostat -x 1看%util和await。如果磁盘利用率接近100%,说明磁盘是瓶颈。 - CPU被限制:虚拟机可能被宿主限制了CPU时间,用
top看%st(steal time)。 - 温度过高降频:用
sensors看温度,如果CPU超过90度,可能触发降频。 - 内存带宽瓶颈:多核同时访问内存,带宽不够。这种情况比较少见,但集成显卡共享内存时可能出现。
7.4 常见问题速查表
| 现象 | 可能原因 | 排查命令 | 解决方向 |
|---|---|---|---|
| 开机慢 | 服务等待超时 | systemd-analyze blame | 禁用或调整超时 |
| 系统卡顿 | I/O等待高 | iostat -x 1 | 换SSD、调调度器 |
| 内存不足 | 缓存占用高 | free -h看available | 加内存、减服务 |
| 风扇狂转 | CPU占用高 | top按CPU排序 | 找出占用进程 |
| 磁盘满 | 日志或缓存堆积 | du -sh /var/* | 清理日志、限制大小 |
| 网络慢 | DNS或MTU问题 | ping、dig | 换DNS、调MTU |
7.5 独家避坑技巧
- 改配置前先备份:
cp 配置文件 配置文件.bak,出问题能快速恢复。 - 用
etckeeper管理/etc:它能自动把/etc纳入版本控制,每次改动都有记录,回滚很方便。 - 不要禁用
systemd-journald:限制日志大小就行,禁用会导致无法排查问题。 - SSD不要用
discard挂载参数:用fstrim.timer定期TRIM更好。 - 虚拟机里慎调
swappiness:宿主可能已经做了内存管理,调太低反而导致OOM。 - 优化后跑一次基准测试:用
bonnie++、fio、sysbench对比优化前后,用数据说话。
8. 软件源与更新策略
8.1 换源:选近的,不选“最快”的
软件源的速度直接影响安装和更新体验。很多人喜欢用“测速”工具选最快的源,但我的经验是:选地理位置近的、稳定的源,而不是瞬时最快的。因为瞬时速度受网络波动影响大,而稳定性更重要。
换源后记得更新缓存:
sudo apt update如果用的是其他包管理格式,对应命令不同,但逻辑一样:换源、更新缓存、测试安装。
8.2 更新策略:安全更新及时,功能更新谨慎
我的更新策略是:
- 安全更新:及时装,最好自动装。
- 内核更新:谨慎,先在测试机验证,确认没有硬件兼容问题再上生产。
- 功能更新:按需,不追新,除非需要新功能。
- 大版本升级:等第一个小版本发布后再升,避开初期bug。
可以用unattended-upgrades自动装安全更新:
sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades配置里可以指定只装安全更新,不装功能更新。
8.3 清理无用包和缓存
系统用久了会积累无用包和缓存,定期清理能释放空间:
# 清理下载的包缓存 sudo apt clean # 删除不再需要的依赖 sudo apt autoremove # 查看可清理的包 sudo apt list --upgradable但不要过度清理,比如apt autoremove有时会删掉你以为不需要但实际在用的包。清理前先看一眼列表,确认没问题再执行。
9. 日志与缓存治理
9.1 限制journal日志大小
systemd-journald默认会占用磁盘空间的10%,在大磁盘上可能占几十GB。限制方法:
# 编辑配置 sudo nano /etc/systemd/journald.conf # 设置 SystemMaxUse=500M SystemMaxFileSize=50M MaxRetentionSec=1month # 重启服务 sudo systemctl restart systemd-journald这样日志最多占500MB,单个文件50MB,保留一个月。对于大多数场景够用了。
9.2 清理旧内核和临时文件
旧内核会占用/boot空间,更新几次后可能满。清理方法:
# 查看已安装内核 dpkg --list | grep linux-image # 删除旧内核(保留当前使用的) sudo apt purge linux-image-旧版本号 # 清理临时文件 sudo rm -rf /tmp/* sudo rm -rf /var/tmp/*注意:删除内核前确认当前使用的内核版本,用
uname -r查看。不要删当前正在用的。
9.3 缓存目录治理
~/.cache和/var/cache是缓存重灾区。浏览器缓存、包管理器缓存、缩略图缓存都在这里。定期清理:
# 查看缓存大小 du -sh ~/.cache/* du -sh /var/cache/* # 清理浏览器缓存(以某浏览器为例) rm -rf ~/.cache/*浏览器名* # 清理缩略图缓存 rm -rf ~/.cache/thumbnails/*但不要无脑全删,有些缓存删了会导致应用重新生成,反而增加I/O。比如包管理器的缓存删了,下次安装要重新下载。
10. 一些个人体会和后续可扩展的方向
这套优化策略我在不同机器上反复用过,有物理机也有虚拟机,有老旧的机械硬盘笔记本,也有NVMe的台式机。最大的体会是:优化效果最明显的往往不是那些“高级参数”,而是最基础的东西——关掉不用的服务、换SSD、加内存、保持系统干净。这些基础动作带来的提升,远比调内核参数来得直接。
另一个体会是:记录比优化本身更重要。我有一台机器,每次优化都记录改动和效果,两年下来积累了十几条记录。后来换硬件时,直接照着记录重新配置,省了大量试错时间。而且当系统出问题时,翻记录能快速定位到最近改了什么。
后续还可以扩展的方向包括:容器化环境下的优化(cgroup限制、命名空间隔离)、网络性能调优(TCP窗口、队列规则)、以及针对特定工作负载的优化(数据库、编译、渲染)。这些内容展开又是一大篇,有机会再聊。
最后分享一个小技巧:如果你不确定某个优化是否有效,用time命令对比优化前后的关键操作耗时。比如time sudo apt update,优化前后各跑三次取平均。数据不会骗人,比感觉靠谱得多。