物理内存不足可能会严重影响 Linux® 的性能。在本文中,我们将学习如何精确地度量 Linux 系统所使用的内存量。还将以 Ubuntu 系统为例学习有关降低内存需求的实践建议。
Linux 广受追捧的一个优点是它比 Microsoft® Windows® 的效率更高,因此在不太前沿的硬件上也能很好地执行。对于依然使用 Windows 98 时代的机器的人来说,最新最卓越的软件(特别是安全补丁)已经不再支持这些机器,因此这种性能优势使 Linux 成为颇具吸引力的升级产品。
然而,问题的真相在于虽然 Linux 内核仍然可以配置成合理的大小和效率,但由于新计算机的处理能力大大加强,很多 Linux 桌面环境(例如 KDE 和 GNOME)都增加了许多特性。因此,在较老的硬件上默认安装大多数发行版时,提供的性能都不是一流的。很多现代应用程序也是如此,例如,Firefox 之类的 Web 浏览器和 OpenOffice 之类的办公套件均功能完备,但是尝试在只有 128MB RAM 的机器上运行这些程序,可能会成为非常痛苦的体验!
该怎么办?丢掉所有旧的硬件然后升级?还是安装 1995 年左右的 Linux 发行版?(如果您决定走这条路,我记得使用 Linux-FT 是一种很好的体验。)
不要担心:多年以前,Linux 社区中的人就已经认识到这个问题,Linux 内核和发行版的一大特性(有人喜欢说 这个 伟大特性)在于其能够定制。本文将介绍如何对 Linux 系统进行裁减,以便在小容量的硬件上获得更好的性能。
内存的作用
在大多数情况下,桌面操作系统性能的一个最重要因素就是系统可用的内存量。虽然拥有快速的处理器效果不错,但是如果没有足够的物理内存保证一直很好地利用处理器,系统可能会花费大量时间用于在物理内存和交换空间之间的交换数据(这种情况称为 磁盘抖动),而 CPU 的大部分时间都是空闲的。因此对于老式的系统来说,额外添加内存通常是提高性能的最简单方法。然而,有很多原因决定了这种方法不太可能,例如缺少空闲插槽,对于一些系统(尤其是笔记本或基于 RAMBUS 的系统)来说,则是缺少买得起的 RAM,以及不希望在一台过期的系统上花更多钱这个容易理解的心理。
如果无法或不愿意升级 RAM,接下来最好减少系统上的 RAM 需求。本文将展示为 Linux 机器打造内存天堂 5 个简单步骤。
步骤 1:选择正确的桌面环境
惟一需要做的重要选择就是要安装的 Linux 发行版和桌面环境(DE)。尽管这是截然不同的选择,但是发行版的选择可能影响 DE 的选择。虽然没有任何东西能够阻挡您在系统上安装软件,例如在 Ubuntu 上安装 Fluxbox;但是您会发现如果简单地使用发行版所附带的默认 DE,一切就会轻松很多。
然后,为了了解系统的日常使用情况,启动一个 Web 浏览器(Firefox 2.0),然后用其打开 developerWorks,将即时消息客户机(Gaim)连接到 MSN,并使用文件管理器来浏览文件夹,又在 OpenOffice 中打开一个相当大的 Microsoft Word 格式的文档。(在本文剩余的部分中,将这种设置称为 轻量级使用水平(light usage level)。)
Linux 发行版的一个重要特征是它们通常不需要花费任何费用,因此很容易下载多个发行版,然后逐一试用一段时间,从而确定喜欢使用的发行版,及其在硬件上的执行情况。如果硬件非常有限,可能希望考察一下 Damn Small Linux 之类的发行版,它宣称可以在只有 16MB RAM 的 486DX 处理器的系统上运行。
还需要注意我们对共享内存的使用也进行了比较,Konqueror 的执行情况比 Firefox 更好,它使用的内存大约少 14MB;然而,如果查看一下总体使用情况,Konqueror 也仍然高于 Firefox,但差距不大,大约只有 5MB。这是因为 Konqueror 大量地使用了 KDE 共享库,使用 KDE 桌面时,这些库被加载到各种应用程序。然而,如果没有使用任何其他 KDE 应用程序,Opera 将是比 KDE 更佳的选择。稍后我们将更加详细地讨论这个问题。
文字处理器
为了测试文字处理器,我加载了首次对表 2 中列出的文字处理器进行测试时使用的同一个 Microsoft Word 格式的文档。
在上面的 Web 浏览器一节中,您可能会注意到:在使用应用程序时,最节省内存的通常是与桌面环境紧密集成的应用程序。这是因为这些应用程序通常大量使用嵌入到 DE 中的共享库,并且这些共享库可能早已加载到系统中。举例来说,Konqueror 是 KDE 的文件管理器和 Web 浏览器;因此,它在 KDE 系统上运行时使用的内存明显少于 Firefox,这是因为它的大部分功能已经通过其他应用程序加载到该系统。类似地,如果希望使用 RSS 聚合器,Akregator 可能是很好的选择,因为它同样非常可能使用相同的库。