2010-01-08 21 views
5

我的服务器有8G RAM和8Gig配置为交换文件。我有内存密集型应用程序运行。这些应用程序具有峰值负载,在此期间我们发现交换使用率增加大约使用1 GIG交换。基于Linux将进程内存从RAM交换到交换文件的确切条件是什么?

我的RAM 4Gigs和交换,并在其上运行类似的内存密集型应用的8场音乐会的另一台服务器。但在这里交换使用是非常可以忽略的。大约100 MB。

我想知道什么是确切条件或粗略的公式在此基础上的Linux会做一个进程内存的换出在RAM交换文件。 我知道它基于交换因子。还有什么基础?交换文件大小?任何指向Linux内核文档/源代码的指示都会很好。

回答

8

我已经看到很多人发布的这是什么一样的主观解释。希望这是一个更完整的答案。

在2.6.28后的拆分LRU上Linux swappiness是一个乘法器,用于任意修改计算的分数,以确定两个LRU中建立的压力。

因此,例如在一个没有剩余空闲内存的系统上 - 您现有内存的价值是根据多少内存被列为“活动”的速率以及页面的频率在进入不活动列表后升级为活动状态。

一个有很多促销/活动和非活动页面降级的LRU有很多用处。

通常文件支持的存储更便宜和更安全,以便在内存用完时自动获得200的修饰符(这使得文件支持的内存比交换支持的内存(其值为0)多200倍,当它乘以这个分数

什么swappiness做的是修改这个值,通过减去你给的swappiness数(默认为60)到文件内存并且增加swappiness的值作为一个倍数给anon memory,因此默认的swappiness离开匿名内存比文件内存高80倍(文件为200-60,匿名内存为0 + 60),因此,在一个典型的使用了所有内存的Linux系统上,页面缓存将不得不超过80倍对匿名我来说比匿名记忆更有效mory将被换出以支持页面缓存。

如果将swappiness设置为100,则会给anon修饰符100和文件内存修饰符100(200 - 100),使两个LRU的权重相等。因此,在一个文件繁重的系统上,想要提供页面缓存的anon内存不如页面缓存那么活跃,那么anon内存将被交换到磁盘以腾出额外页面缓存的空间。

+0

非常丰富。谢谢。 – Zenil

+1

为了记录,交换的金额与您使用交换的频率没有关系。 –

5

Linux操作系统(或者任何其他操作系统)把存储器成页(通常4KB)。这些页面中的每一个代表一块内存。维护这些页面的使用信息,基本上包含有关页面是空闲还是正在使用(某些进程的一部分),最近是否被访问过,它包含什么类型的数据(过程数据,可执行代码等等)的信息),页面的所有者等。这些页面也可以大致分为两类 - 文件系统页面或页面缓存(所有读取/写入文件系统的数据所在的页面缓存)和属于进程的页面。

当系统内存不足,内核启动换出基于其使用的网页。使用访问的新近程度排序的页面列表对于确定哪些页面可以被换出是常见的(Linux内核也有这样的列表)。

交换过程中,Linux内核的需求来决定的摧毁内存页面并将它们发送到交换时如何权衡。如果它太积极地交换文件系统页面,则需要从文件系统读取更多的读取数据,以便在需要时读取这些页面。但是,如果它更积极地交换进程页面,则可能会损害交互性,因为当用户尝试使用交换出的进程时,必须从磁盘读回进程页面。在这看到一个很好的讨论here

通过设置swappiness = 0,你说的是linux内核不换出属于过程的页面。当设置swappiness = 100时,您会告诉内核更积极地换出属于进程的页面。要调整系统,请尝试使用“vmstat”命令以10为单位更改swappiness参数,监视每次设置中交换的性能和页面。保持最佳效果的设置。请记住在高峰使用时间内进行此测试。 :)

对于数据库应用,swappiness =通常建议0。 (即使这样,测试系统上的不同设置以获得良好的价值)。

参考文献:
http://www.linuxvox.com/2009/10/what-is-the-linux-kernel-parameter-vm-swappiness/
http://www.pythian.com/news/1913/

+1

术语可能已经改变,但在过去的日子里,“换” 意味着交换整个过程,而“分页”意味着交换单个存储器页面。大多数操作系统都会进行分页,我唯一可以回忆的事情是“真正的”交换是UNICOS。 –

+1

我仍然遇到一些保持交换旧定义的老手,但现在非常罕见。全过程交换在当前系统中是一种不常见的技术,“交换”开始受到定义腐蚀并成为无用术语,该术语被重新定义为再次有用,使得它基本上与“分页”相同。我偶尔会碰到一种名为“全进程分页”的老式交换方式,这种交换方式可能是重新定义轮回的有趣转折,但往往被理解。 – wrosecrans

+0

对于共享库,写入时复制分支等,完全意味着通过交换整个过程变得有点模糊。 –