Board logo

标题: 降低 Linux 内存开销(2) [打印本页]

作者: look_w    时间: 2018-5-19 16:05     标题: 降低 Linux 内存开销(2)

步骤 2:选择适当的应用程序选定了发行版之后,接下来的事情是选择要使用的应用程序组合。不同应用程序的内存需求可能差异很大;有时需要在规模和功能之间进行权衡,但是在另外一些情况下,即使功能相同的应用程序对内存的需求也可能存在巨大差异。
为了度量本文的内存使用情况,我们将使用 exmap 工具。该工具比 ps 或 top 更精确,因为它考虑了多个应用程序使用的共享库。例如,如果两个应用程序使用了相同的共享库,各占 1MB 内存,ps 会显示这两个应用程序均额外使用了 1MB 内存,exmap 则能更准确地显示每个应用程序都只使用了 500 KB 内存。这种精确性对于评价 KDE 和 GNOME 之类的桌面环境非常重要,因为在这些情况下应用程序之间会大量使用共享库。
对于在下面几部分讨论的每个应用程序,我测量了 exmap 所生成的 residenteffective resident 值。resident 值表示进程使用的物理内存总量,包括其他进程使用的共享库;该值通常与 ps 或 top 输出的值相同。effective resident 值是将共享库占用的内存平均分配给各个共享进程得到的;从指定进程所消耗的系统内存角度来看,该值更加精确。
还需要注意,在确定进程的全部内存开销时,还应该考虑 mappedeffective mapped 的值,它是进程中位于交换空间中的那些部分。mapped 值与 resident 值类似,但是它针对交换空间中的页面,而不是物理内存中的页面。因此要查看不考虑共享库时的数据,可以将 resident 和 mapped 值加在一起;要查看考虑对共享库时的数据,就需要将 effective resident 和 effective mapped 值加在一起。在制作该表时,并没有 记录这些值,这是因为对于我们的测试来说,交换空间中并没有什么进程,因此,对于这些列,exmap 命令输出结果的值均为 0。
Web 浏览器对于表 1 中的各个浏览器,均启动了这个程序,并打开了 developerWorks 主页,然后等待它们全部显示出来。结果如表 1 所示。
表 1. Web 浏览器的内存使用情况比较应用程序Effective resident 内存(KB)Resident 内存(KB)Firefox2770835068Opera2047727816Konqueror1347929748Dillo27766888Lynx11011540
从该表可以看出,这些浏览器的内存使用情况存在很大差异,内存需求最高的浏览器(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 Writer7011481960AbiWord5802965224KWord(来自 KOffice)4651260096
从这些数字可以明显看出,OpenOffice Writer 使用的内存比 KWord 或 AbiWord 都要多。KWord 使用的内存仅次于 OpenOffice,它在正确地显示 Microsoft Word 格式的文档方面做得最好。尽管 AbiWord 也可以成功地打开该文档,但在正确显示文档时会遇到一些问题,因此如果对您来说与 Microsoft Office 的协作非常重要,最好选择 OpenOffice。
即时消息客户机为了测试即时消息,我使用表 3 给出的 IM 客户机分别登录到 MSN Messenger 帐号中。
表 3. IM 客户机的内存使用情况比较应用程序Effective resident  内存(KB)Resident  内存(KB)aMSN1845520344Gaim1345621464Kopete1098824176KMess715419660
此处,Kmess 最适合我,并且它是合理的选择,因为我只对连接到 MSN 感兴趣。如果需要使用其他服务,那么 Kopete 似乎是最好的选择。不过要注意,如果使用不同的 IM 协议,应用程序使用的内存可能会增加;另外,Kmess 是集成的 KDE 应用程序,如果没有使用 KDE,Gaim 可能更适合您。
分析、选择并不断重复现在您已经了解如何分析应用程序的内存使用情况;可以对自己感兴趣的所有应用程序类型简单地重复这个过程,体验各种可用选择,直到找到内存需求最低又能满足功能需求的选择为止。
在上面的 Web 浏览器一节中,您可能会注意到:在使用应用程序时,最节省内存的通常是与桌面环境紧密集成的应用程序。这是因为这些应用程序通常大量使用嵌入到 DE 中的共享库,并且这些共享库可能早已加载到系统中。举例来说,Konqueror 是 KDE 的文件管理器和 Web 浏览器;因此,它在 KDE 系统上运行时使用的内存明显少于 Firefox,这是因为它的大部分功能已经通过其他应用程序加载到该系统。类似地,如果希望使用 RSS 聚合器,Akregator 可能是很好的选择,因为它同样非常可能使用相同的库。
因此,如果您注重内存使用情况,则在自己的 系统上执行这些测试非常重要,这是因为很难通过查看他人的基准测试结果来了解哪个应用程序在您的系统上使用的内存较少。
这个事实对于选择 DE 也有影响。举例来说,如果真正希望使用 Konqueror,则使用 KDE 作为 DE 可能最为有效。类似地,如果您是 GNOME 用户,在使用您感兴趣的简短 KDE 应用程序之前需要三思,因为它可能会使用整个主机来加载库,但只有自己会使用这些库。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0