科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何有效降低Linux操作系统的内存开销 (2)

如何有效降低Linux操作系统的内存开销 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对于表 1 中的各个浏览器,均启动了这个程序,并打开了 developerWorks 主页,然后等待它们全部显示出来

作者:korn 来源:ibm 2007年10月14日

关键字: 开销 内存 操作系统 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

Web 浏览器

对于表 1 中的各个浏览器,均启动了这个程序,并打开了 developerWorks 主页,然后等待它们全部显示出来。结果如表 1 所示。

表 1. Web 浏览器的内存使用情况比较

应用程序 Effective resident 内存(KB) Resident 内存(KB)

Firefox 27708 35068

Opera 20477 27816

Konqueror 13479 29748

Dillo 2776 6888

Lynx 1101 1540

从该表可以看出,这些浏览器的内存使用情况存在很大差异,内存需求最高的浏览器(Firefox)使用的内存比需求最低的浏览器(Lynx)多了大约 27 倍。这并不是非常公平的比较,因为 Lynx 并不能实现同样的功能(举例来说,它甚至不能显示图形),但这说明,可以根据需求极大地降低内存的使用情况。尽管表 1 中列出的前 3 个浏览器的功能与第一个浏览器的功能多少有些相同,但 Opera 使用的内存大约只有 Firefox 的 2/3,Konqueror 使用的内存比 Firefox 少一半。

对于要求不太高的使用需求来说,Dillo 是介于功能完善的浏览器和只有少量开销的 Lynx 之间的折中方案。Dillo 提供了一个 GUI;但在默认状态下其功能相当有限,没有其他插件时甚至不支持 SSL!

还需要注意我们对共享内存的使用也进行了比较,Konqueror 的执行情况比 Firefox 更好,它使用的内存大约少 14MB;然而,如果查看一下总体使用情况,Konqueror 也仍然高于 Firefox,但差距不大,大约只有 5MB。这是因为 Konqueror 大量地使用了 KDE 共享库,使用 KDE 桌面时,这些库被加载到各种应用程序。然而,如果没有使用任何其他 KDE 应用程序,Opera 将是比 KDE 更佳的选择。稍后我们将更加详细地讨论这个问题。

文字处理器

为了测试文字处理器,我加载了首次对表 2 中列出的文字处理器进行测试时使用的同一个 Microsoft Word 格式的文档。

表 2. 文字处理器的内存使用情况比较

应用程序 Effective resident 内存(KB) Resident 内存(KB)

OpenOffice Writer 70114 81960

AbiWord 58029 65224

KWord(来自 KOffice) 46512 60096

从这些数字可以明显看出,OpenOffice Writer 使用的内存比 KWord 或 AbiWord 都要多。KWord 使用的内存仅次于 OpenOffice,它在正确地显示 Microsoft Word 格式的文档方面做得最好。尽管 AbiWord 也可以成功地打开该文档,但在正确显示文档时会遇到一些问题,因此如果对您来说与 Microsoft Office 的协作非常重要,最好选择 OpenOffice。

即时消息客户机

为了测试即时消息,我使用表 3 给出的 IM 客户机分别登录到 MSN Messenger 帐号中。

表 3. IM 客户机的内存使用情况比较

应用程序 Effective resident 内存(KB) Resident 内存(KB)

aMSN 18455 20344

Gaim 13456 21464

Kopete 10988 24176

KMess 7154 19660

此处,Kmess 最适合我,并且它是合理的选择,因为我只对连接到 MSN 感兴趣。如果需要使用其他服务,那么 Kopete 似乎是最好的选择。不过要注意,如果使用不同的 IM 协议,应用程序使用的内存可能会增加;另外,Kmess 是集成的 KDE 应用程序,如果没有使用 KDE,Gaim 可能更适合您。

分析、选择并不断重复

现在您已经了解如何分析应用程序的内存使用情况;可以对自己感兴趣的所有应用程序类型简单地重复这个过程,体验各种可用选择,直到找到内存需求最低又能满足功能需求的选择为止。

在上面的 Web 浏览器一节中,您可能会注意到:在使用应用程序时,最节省内存的通常是与桌面环境紧密集成的应用程序。这是因为这些应用程序通常大量使用嵌入到 DE 中的共享库,并且这些共享库可能早已加载到系统中。举例来说,Konqueror 是 KDE 的文件管理器和 Web 浏览器;因此,它在 KDE 系统上运行时使用的内存明显少于 Firefox,这是因为它的大部分功能已经通过其他应用程序加载到该系统。类似地,如果希望使用 RSS 聚合器,Akregator 可能是很好的选择,因为它同样非常可能使用相同的库。

因此,如果您注重内存使用情况,则在自己的 系统上执行这些测试非常重要,这是因为很难通过查看他人的基准测试结果来了解哪个应用程序在您的系统上使用的内存较少。

这个事实对于选择 DE 也有影响。举例来说,如果真正希望使用 Konqueror,则使用 KDE 作为 DE 可能最为有效。类似地,如果您是 GNOME 用户,在使用您感兴趣的简短 KDE 应用程序之前需要三思,因为它可能会使用整个主机来加载库,但只有自己会使用这些库。

步骤 3:删除不希望使用的服务和设置

选定发行版、桌面环境和应用程序组合之后,哪些工作还可以降低使用的内存呢?要回答这个问题,需要对系统进行深入挖掘和配置。借助 exmap,可以分析出系统上正在运行的内容,然后尝试删除不需要的内容,并按照自己的需要对系统进行配置。

较好的着手点是系统引导时自动启动的服务,但这样做需要非常小心,才不至于删除系统运行时需要的任何内容。需要研究具体的发布版需要哪些内容,以及服务的配置方式,因为各个发行版的这些内容可能有所不同。有些发行版比其他发行版差,因为它默认启动很多不需要的服务,例如 Web 服务器等,这会占用大量内存。

除了系统服务之外,您可能还希望了解 DE 的配置情况,因为它也可能启动不需要的服务。

我的 Kubuntu 系统看起来并没有启动太多不必要的服务,但是快速查看一下进程列表,就会发现一些明显能够删除的内容:

HPLIP(4.4MB):HP 打印机和扫描器所使用的服务。由于这台机器上并没有连接此类设备,所以并不需要该服务。

cupsd(1.1MB):打印机后台处理进程。由于这台机器并没有连接打印机,所以并不需要该服务。

kbluetoothd(3.2MB):KDE Bluetooth 后台处理进程。由于这台机器上并没有 Bluetooth 连接,所以并不需要该服务。

klipper(1.7MB):KDE 剪切板工具。我没有考虑使用这个工具,因此将其禁用。

KMix(4.1MB):KDE 音频合成器。并不是所有时间都需要运行它,因为我通过外部喇叭来调节音量。

只需花 5 分钟进行配置,就能节省 14MB 左右的内存,与最初大约节省 77MB 相比,这是不错的着手点。

深入了解您的 DE 和其他大型应用程序的设置非常值得,因为有些设置可能会影响所使用的内存量。举例来说,通过减少虚拟桌面的个数,也许可以节省一些内存,使用较大的位图作为背景时尤其如此。关闭一些奇异的显示特效也可能有所帮助。

步骤 4:期望要适当

在使用旧硬件时,应该考虑到该机器的局限,并正确地进行操作。举例来说,如果希望编辑一组照片,请不要同时打开所有照片。这样只会不必要地消耗内存。如果依次打开,并且编辑之后立即将其关闭,就会简单很多。类似地,如果您正在尝试捕获并编辑一些视频,请考虑单独捕获每一个屏幕,而不要一次捕获所有屏幕;如果正在创建包含图形展示的大型文档,则在编辑完文本之前不要添加图片。

步骤 5:优化系统

最后一个步骤是查看系统中的内存大户,并找出是否可以从某处节省一些内存。有很多节省内存的机会,但性能就会有所下降,对于大多数人来说,对性能产生的负面影响和所需的工作量,使得这样做非常不值得。不过,可以考虑下面一些操作:

只使用硬件特有的驱动程序重新编译内核。大部分主流发行版都适合于大量硬件,因此它们通常支持您没有使用的很多硬件。这可以产生一定的优势,尽管以模块形式存在的硬件支持在不需要时不会加载到系统中。

重新编译特定的应用程序或库,这样就可以对大小进行优化,使其专门用于正在使用的特定 CPU,从而也可以节省一些内存。Gentoo 发行版在这个方面做得非常好,您可以使用自己选择的确切编译标记轻松地重新编译某些或所有系统组件。遗憾的是,这个过程在老机器上执行时可能非常漫长。

删除应用程序或库的某些特性,然后对其重新编译也可以降低一些内存需求。借助 Gentoo 又是很好的主意,因为它包含 USE 标记的概念,允许在禁用应用程序的特性之后,轻松构建系统。这样可以极大地减少应用程序的大小,应用程序发布时通常都支持大量的文件格式、编码等,这通常需要加载一些库来提供实际支持。如果您知道自己永远都不会阅读(比如说)JPEG 文件,就可以在 Gentoo 中说明这一点(通过 USE="-jpeg"),这样任何处理图形的应用程序编译后都不支持 JPEG,从而可以降低内存负载。

最近推出的 2.6 内核有一个 swappiness 参数,它可以在运行时进行调优。这个参数决定了,将应用程序移动到交换空间而不是移动到正在减少的高速缓存和缓冲区中的可能性,在前面的测试中可以看到,将应用程序交换出去,而保留大块物理内存以进行缓存的情况很常见。通过降低交换出去的可能性,缓存可能减少,这样就可以在内存中保留更多应用程序。但是,这种移动是否真正会使机器运行得更快,取决于正在运行的应用程序。如果在应用程序之间频繁地换入换出,那么机器的响应能力可能会提高,因为它们位于内存中的概率增加了;然而,如果有一个任务会执行大量磁盘读写操作,这样做可能速度很慢。通常,降低 swappiness 可以提高交互式应用程序的响应能力,但是会降低系统的总体吞吐量。

结束语

本文的思想可以使您的老机器重新焕发青春(以及其他一些安全性),并在老式硬件上更好地使用 Linux。测量结果显示,一台 800-MHz/256-MB 的机器可以很好地运行一个相当好用的 Linux 桌面,以满足轻量级的日常办公和家用需求,如发送 e-mail、浏览 Web、文字处理等工作。稍作调整并进行实验,即使 128MB 的机器也可以成为令人满意的桌面计算机。

尽管本文重点讲述在相当有限的硬件上实现功能良好的桌面,也可以对其他 Linux 应用采用相同的原理。不管最新的超大机器上有多少内存,很快就会发现新应用程序已占满了这些内存。通过应用这些技术,可以稍微提高过载服务器的性能,并深入了解应用程序的内存使用情况。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章