如何提高Ubuntu整体系统性能?

你有什么关于在Ubuntu上提高整体系统性能的技巧?受到这个问题的启发,我意识到Ubuntu的一些默认设置可能相当保守,如果你希望让它更快,可以进行微调而几乎没有风险。
这并不是针对特定应用程序(例如使Firefox加载页面更快),而是系统范围内的。
最好每个答案提供一个提示,并提供足够的细节供人们实施。
我的一些提示如下:
  • 安装Preload(通过软件中心或sudo apt-get install preload);
  • 更改Swappiness值 - "控制内核在尝试释放内存时倾向于交换的程度";
你有什么提示吗?
PS:由于这不是旨在拥有唯一答案,而是几个有用提示,因此我将其作为社区Wiki。

46提及你的建议有多有效果是个好主意:你注意到了多大的改善,甚至更好的是,你能够进行测量吗? - Gilles 'SO- stop being evil'
5我没有找到任何证据表明改变swappiness参数会产生任何积极的影响。它可能会给人一种暂时的性能提升感觉,但这种感觉很快就会消失。我没有看到任何具体的基准测试证据来证明改变swapiness参数的有效性。 - txwikinger
5我怀疑它会有任何明显的性能影响。ttys几乎不占用任何内存,也不会有任何显著的CPU使用率。 - txwikinger
6“过早优化是万恶之源”这句话不是说的吗?(http://en.wikipedia.org/wiki/Program_optimization#Quotes) - Alejandro
2@Alejandro,这句话假设你一开始就尽力做到了最好。 - Thorbjørn Ravn Andersen
1这些提示中,很多都和硬件相关吧?例如,最佳的交换速度将取决于总线速度、硬盘速度和内存。 - naught101
@Alejandro,这是什么让它变得过早,并且它何时会成熟?另外,你应该意识到你引用的是一篇关于努力使软件表现迅速重要性的文章,它只是提到了不经思考的优化尝试,然后指出优化仍然很重要(并给出了一个函数速度增加12%的例子),对吗? - Jon Hanna
1如果有人感兴趣的话,我写了一个适用于Ubuntu Raring的bash脚本(链接:https://gist.github.com/alixaxel/5605638#comment-832059),它可以自动化这里建议的大部分操作。我注意到我的旧型号笔记本,只有2GB的内存,在使用这个脚本后有了巨大的改善。 - Alix Axel
当系统从SSD运行时,这个预加载功能会提供显著的好处吗? - tomsv
第二个链接(有关预加载的链接)似乎无法使用。它一直在加载,但浏览器中没有显示任何内容,只有一个不断加载的空白页面。(嗯!有趣!这个页面是关于预加载应用程序的,而它正在...预加载!) - Cristiana Nicolae
目前,在Snap Store上没有名为"Preload"的应用程序。但是,可以使用apt进行安装。 - MAChitgarha
37个回答

如果你是“普通人”,那就什么都不要做。不要随意操作你不懂的程序或设置。不要按照网上发布的提示,通过自己编译软件或安装自制内核来提高系统性能。
这些提示中有些确实可以稍微提升性能,但有些可能会给你带来真正的麻烦,比如改错设置、禁用错误服务或安装错误的驱动程序等等。
所以只要对你的系统运行良好就好了。顺便说一句:你为什么需要那5%的性能提升呢?它不会让你在办公文档上打字更快,也不会让你在一半的时间内编辑度假照片。
并且,为了明确起见:如果你不是普通人,而是开发者/游戏玩家之类的,需要尽可能提升性能,那么你不是这条评论的目标对象...

81调整设置并编译自己的内核和软件是学习的好方法。我认为应该鼓励这样做,只要人们知道当他们严重损坏系统时,可能需要重新安装操作系统。 - Nerdfest
24只有真正想要了解内核工作原理的人才应考虑编译自己的内核。对于大多数人来说,他们甚至都不需要知道“内核”存在。坚持使用原始内核,您可以享受定期软件更新的好处。 - Brad Figg
@bananeweizen:我本来要对你大喊一句“你以为你是谁?”或者其他幼稚园式的侮辱,幸好我读了你的回答不止一遍……如果可以的话,我会给它点赞数百次。 - dag729
1@Brad,时间真是变了啊 :) 当我开始接触Linux的时候,我们必须自己编译内核,因为那时还没有实现动态模块。不过我并不怀念那个时候! - Thorbjørn Ravn Andersen
2@Nerdfest 这是一个很好的观点,我在Linux世界中最重要的老师无疑就是Gentoo手册了...我从未真正使用过一个可工作的图形用户界面,但是我确实学到了很多关于基本Linux安装的知识!而这在所有发行版上都几乎是一样的。 - LassePoulsen
@Nerdfest 很棒的回答,此外还可以补充一点,这就是虚拟机的用途。选择一个稳定的操作系统(如Ubuntu 10.04、Fedora 13等),然后安装VirtualBox,开始玩虚拟机吧! - Chris
@Bananeweizen 我并不认为这个问题是针对“开发人员和重度玩家”的,所以我给你点了个踩。 - ixtmixilix
3我现在正在尝试一些性能调整,准确地说是为了从中学到东西。话虽如此,在两种情况下我总是想要对Windows进行调整,并且我对Ubuntu也持有同样的态度:1. 系统太慢了,每一点改进都会有所帮助。2. 系统太快了,我不禁想知道它还能提升到什么程度!至于中等系统,我就不去碰它们了 :) 话虽如此,肯定是加一分。 - Jon Hanna
清洁工具会提高系统性能吗? - Pandya
作为一名开发者、游戏玩家和黑客,当我想要利用机会学习的时候,学习的机会是很大的。但大多数时候,我希望有一个可靠的系统,它只需要正常工作就可以了。"学习"的阴暗面是认知过载,花费几个小时进行故障排除和试错,只为了获得5%的性能提升,在我看来是非常疯狂的,考虑到这样的知识在六个月后就会过时。 - Coder Guy

禁用不需要的任何服务的自动启动(甚至完全删除该软件包)。
许多软件包会自动启动服务。即使这些服务很少被使用,它们仍然会占用内存和CPU资源。在这种情况下,最好停止这些服务,或将它们从自动启动中移除,并仅在需要时启动它们。
要在10.04上阻止应用程序启动,请转到“系统>首选项>启动应用程序”(在其他版本上可能略有不同)。
在12.04上,您可以通过点击Dash图标来选择启动应用程序。然后,键入“startup”并选择“启动应用程序”。
只需取消标记您不需要的应用程序。但是,请确保您对此有把握,不要随意删除您不了解的应用程序。如果您对某个应用程序不确定,可以进行谷歌搜索或在此提问以获取有关特定程序的帮助。

4不错!简单而有效。我个人会禁用与蓝牙相关的功能,因为我的笔记本电脑没有蓝牙。 - Decio Lira
2你能解释一下/附上一个链接,说明如何在Ubuntu下查看和禁用/启用服务吗? - Skizz
1对于Kubuntu/KDE用户来说,相应的操作是:开始菜单按钮 -> 系统设置 -> 系统管理 -> 启动和关机。有两个部分,一个是'自动启动',另一个是'服务管理器'(用于长期运行的守护进程),您可以同时启动和停止服务,并确保它们不会作为标准引导顺序的一部分启动。 - arielf

[免责声明] 请自行承担以下操作的风险。

Tushar Neupaney 在这里提供以下建议:here

1. 使用轻量级应用程序(将默认应用程序替换为它们)

  • Gedit >> Mousepad
  • 图片查看器(EOG...)>> Gpicview
  • 网络管理器 >> Wicd
  • Evince >> epdfview

2. 减少 Swappiness

  • sudo vim /etc/sysctl.conf

    编辑:vm.swappiness=10

3. 对于双核处理器(使用并发性)

  • sudo vim /etc/init.d/rc

    Edit: CONCURRENCY=shell

    shell选项现已过时。默认值为makefile,而shell在2010-05-14之前是makefile的别名。

4. 清理位于 /var/cache/apt/archives 的 apt 缓存以及 /etc/apt/sources.list 中不必要的 apt 源列表

  • sudo apt-get autoclean

5. 安装 BUM(Boot Up 管理器)

  • sudo apt-get install bum

    从启动中移除不必要的应用程序和服务

6. 移除一些不必要的 TTY

  • sudo vim /etc/default/console-setup

    编辑:ACTIVE_CONSOLES="/dev/tty[1-3]"

    注意:转到/etc/init/并更改你不想要的tty文件。编辑它们并注释以“start on runlevel”开头的行。所以在这种情况下,你将注释掉"tty4.conf"到"tty6.conf"文件中的启动行。

7. 安装 Prelink

  • sudo apt-get install prelink
  • sudo vim /etc/default/prelink

    编辑:PRELINKING=Yes

  • sudo /etc/cron.daily/prelink

    实际上,自 Feisty Fawn 以来,Prelink 是无用的(因为 Ubuntu 现在使用一种非常有效的运行时链接器)。此外,它是具有侵入性的 - 它直接修改可执行文件,最终可能导致破坏。不要这样做。

8. 安装 Preload

  • sudo apt-get install preload

9. 如果你不使用休眠和睡眠功能,请摆脱 kinit。

  • sudo vim /etc/initramfs-tools/conf.d/resume

    编辑:注释(在前面加上#)RESUME=XXXX……………………。


51这并没有提供为什么我们应该听从你的建议的信息。请提供一些背景和基准。 - The Pixel Developer
我已经编辑并添加了所要求的“背景”;-) - desgua
3我正在尝试第三个选项,并且在更改行上面的注释中列出了有效的选项,但“shell”不是其中之一。这个答案已经过时了吗?难道注释没有告诉我所有的选项吗? - John
1我也尝试了第三个选项,尽管“shell”选项没有被提及为有效选项。在编辑启动后,启动时间比设置并发为“none”时长了两倍。所以我又回到了原始设置。 - Wojciech
sed -i -r '1s/(^[^#])/#\1/g' /etc/initramfs-tools/conf.d/resume这行命令翻译成中文。但只有在注释不存在时才添加注释 - 这个好,可以添加到脚本中 :) - SergioAraujo
关于第三点:“有效选项为'none'和'makefile'。之前使用的过时选项为'shell'和'startpar'。自2010-05-14起,这些过时选项被别名为'makefile'。自同一日期起,默认选项为'makefile',因为Debian中的init.d脚本现在包含依赖信息,并且使用此信息进行排序。”请问有人能确认这里的正确解决方案是什么吗? - radek
在我的Ubuntu 11.10上,关于rc文件中的CONCURRENCY选项的评论表明shell是一个过时的选项,并且从2010-05-14开始是makefile的别名,默认选项。 - jgomo3
一个非图形界面的替代品,用于管理启动项(Boot Up manager) 列出所有服务 service --status-all 移除一个服务 service --statusupdate-rc.d -f service_name remove-all - pl1nk
预链接实际上并没有太大帮助。事实上,它的好处微乎其微,详见:http://smackerelofopinion.blogspot.co.uk/2009/06/does-prelinking-speed-up-boot-times.html - Colin Ian King

减少启动菜单超时时间

听起来很琐碎,但我发现Ubuntu默认的10秒对我来说太长了。假设我的屏幕需要一点时间来自动调整分辨率,我一眼看到计数器显示8秒。

我会将超时时间编辑为3秒,这样我就有1秒钟的时间来查看启动菜单(考虑到屏幕调整分辨率的时间)。这足够的时间,因为按箭头键选择其他项目会停止计数器。

Grub(9.10 Karmic之前的版本)

sudo -i gedit /boot/grub/menu.lst

找到并编辑“TIMEOUT”行 Grub 2(9.10 Karmic及之后的新安装)
sudo -i gedit /etc/default/grub

找到并编辑"GRUB_TIMEOUT"行,然后运行sudo update-grub

如果你的RAM不足,可以使用Ubuntu存储库中的zramswapzram-config。它是一种虚拟交换空间,将未使用的RAM内容压缩而不是将其放入磁盘(通常在达到RAM限制后会导致系统冻结)。与每次RAM不足时系统冻结相比,我几乎没有遇到性能损失。
这仅适用于Natty及更高版本(因为您需要2.6.37.1或更新的内核)。对于旧系统,您可以使用compcache,但需要手动设置。
对于从未达到RAM限制的用户,它在HDD系统上仍然可以提供一些速度提升,但最好降低swappiness以达到相同效果。
SSD用户:很可能您不会体验到任何速度提升,但zramswap可以大大减少SSD的磨损。

3似乎是一个非常有用的应用程序! - Decio Lira
对于低内存系统来说,这是非常有用的。我想知道为什么它不会默认安装在这样的系统上呢? - NoBugs
@NoBugs 因为Ubuntu的开发者非常保守。但是在Ubuntu手机上,默认情况下是启用的。 - Shnatsel
@Shnatsel "Google在Chrome OS中使用zram,并且它也作为Android 4.4设备的选项可用" (https://en.wikipedia.org/wiki/Zram) - NoBugs

我在我的文件系统(ext4和reiserfs)中添加了“noatime”选项后,整体性能有所提升。
虽然我无法提供速度测试,但我邀请您自行尝试并亲眼见证。
Ubuntu论坛上有一个有用的资源:在fstab中使用noatime来保护硬盘

4在Ubuntu中,实时(relatime)不是默认设置吗? - ImaginaryRobots
@ImaginaryRobots: "在我为我的文件系统(ext4和reiserfs)添加noatime选项后,我感受到了整体性能的提升。" -- 你是指"relatime"吗?-- 不,我是指"noatime" :D - dag729
9这可能会导致一些依赖此功能的电子邮件软件和备份工具崩溃。但对于普通用户来说,这应该是可以接受的,因为Thunderbird和Evolution都不会受到影响。虽然在Ubuntu上,从relatime(默认)切换到noatime不会带来太多改进。请参阅http://lwn.net/Articles/244829/以了解relatime的工作原理,您将了解它已经大大减少了最后访问时间更新的次数。 - Huygens
没有公共访问文档或适当的指导来源,也没有进一步的步骤。 - Tejaskumar Tank
另一个来源(来自2020年),因为答案中提供的链接不再公开可访问 https://opensource.com/article/20/6/linux-noatime - dag729

更换机械硬盘为固态硬盘

固态硬盘在几乎每台计算机中都变得更快,并且似乎成为最瓶颈

以我为例,启动时间从约15秒降至约3秒,首次启动应用程序的时间也大大减少(例如Firefox,从约5秒减少至不到一秒)。

想要一些基准测试吗?这里有一个。


1如果你的电脑比较旧,这个方法可能会在机械方面起作用(例如使用IDE连接器的SSD),但是要达到预期的速度提升,还取决于你的系统中其他瓶颈的存在(比如IDE连接器,就是一个例子 :))。 - nutty about natty
1我很惊讶这个回答没有得到更多的赞同票。 - WinEunuuchs2Unix
NVME基于网络的速度比硬盘快得多,即使是带有固态硬盘的旧笔记本电脑也会变得更快。再加上16GB以上的内存,不使用交换空间...速度真是太棒了。 - Tejaskumar Tank

我不确定我的答案是否合格,因为Ubuntu通常表示GNOME和使用更轻量级替代方案的Ubuntu变体有稍微不同的名称,比如Xubuntu。
摆脱GNOME是我通常建议的第一件事。如果您喜欢像fluxbox这样轻量级的东西,那就这样做吧。

我知道Archlinux和Ubuntu不一样,但是当我在我的Archlinux上安装了Ratpoison时,我看到了一个夸张的性能提升(是的,对于某些人来说可能过于简约,但对于你的电脑来说确实是一种加速)。 - dag729
3没问题,试试XMonad吧,它真的很棒。 - Robert Massaioli
+1。或者安装Ubuntu,但在安装后切换到xfce界面。 - David Oneill
XFCE确实稍微快一点,但只是稍微,并且使用相同数量的资源。尝试一下Enlightenment(例如Bodhi Linux是带有Enlightenment的Ubuntu 10.04),它非常轻量级,并且仍然具有Compiz的一些视觉效果。或者尝试LXDE或Fluxbox,Linux Mint似乎将它们很好地整合了进去。 - Shnatsel

在`/etc/sysctl.conf`中设置`vm.swappiness=10`。当我填充内存时,我会注意到明显的速度提升。由于我大部分时间都在使用Eclipse,物理内存可能变得稀缺。
编辑:
Ubuntu Swap FAQ中可以看到:
“Ubuntu的默认设置是swappiness=60。减小swappiness的默认值可能会提高典型的Ubuntu桌面安装的整体性能。推荐swappiness=10的数值,但也可以自行尝试。注意:Ubuntu服务器安装与桌面系统有不同的性能要求,因此默认值60更适合。”
这个FAQ对交换空间(swap)是什么、如何使用以及如何更改做了很全面的解释。对于任何打算调整swappiness或交换文件大小的人来说,建议阅读一下。

将值设置为100(我猜是最大值)会导致系统频繁地从内存交换到磁盘。这样做不会使系统变得更慢吗?因为它需要更频繁地访问硬盘。我曾经认为,在拥有足够的内存时,较低的值会更好。 - Decio Lira
2@Erigami: +1 喜欢你提到了一些「真正有影响」的事情。 - Gilles 'SO- stop being evil'
2@DecioLira:不是的。它将我当前未使用的应用程序推送到磁盘上,这意味着我当前正在使用的应用程序可以访问更多的物理内存。 - Erigami
2你有没有一些具体的数据能够展示这种差异发生在哪种情况下,并且产生了怎样的不同呢? - txwikinger
1@txwikinger 不是的。有很多应用程序在运行时,它感觉比swappiness为0或10更快。 - Erigami
2@Erigami:我曾经花了一些时间来调整swappiness。一开始感觉速度变快了,但随着时间的推移,一切似乎又回到了原点。真正的测量结果会非常有趣。 - txwikinger
2我所做的各种测试证明,vm.swappiness=100比10更好。在一台慢速机器上,它会有很大帮助;而在一台快速机器上,除非你运行多个GB级应用程序页面到内存中,否则不会有任何区别。这是双赢的结果。 - NightwishFan
哇,谢谢你。做了这个之后,性能有了很大的提升。我也很感激你展示了Ubuntu的文档,明确了桌面推荐配置。 - Joshua K
对于性能来说,这是很好的,但是当计划使用休眠功能时,需要将其替换为桌面。 - Tejaskumar Tank

尽管听起来有些傻,但请务必时刻更新您的系统!

6是的。我立刻注意到改善了。 - ixtmixilix
但是:请手动进行翻译,或者通过命令行完成。通过更新管理器每天更新可能会导致旧系统冻结(让您猜测发生了什么)。 - nutty about natty
不仅需要更新,而且始终需要优化和调整参数。 - Tejaskumar Tank