Linux将进程内存从RAM交换到交换文件的确切条件是什么?

Linux将进程内存从RAM交换到交换文件的确切条件是什么?,linux,linux-kernel,swap,virtual-memory,swapfile,Linux,Linux Kernel,Swap,Virtual Memory,Swapfile,我的服务器有8Gig的RAM和8Gig的交换文件配置。我有内存密集型应用程序正在运行。这些应用有峰值负载,在此期间,我们发现交换使用量增加。使用了大约1G的交换 我有另一台服务器,它有4G内存和8Gig交换以及类似的内存密集型应用程序。但在这里,交换的使用是非常微不足道的。大约100MB 我想知道什么是精确的条件或粗略的公式,Linux将根据这些条件将RAM中的进程内存交换到交换文件。 我知道这是基于swapiness因素。它还基于什么?交换文件大小?任何指向Linux内核文档/源代码的指针都将

我的服务器有8Gig的RAM和8Gig的交换文件配置。我有内存密集型应用程序正在运行。这些应用有峰值负载,在此期间,我们发现交换使用量增加。使用了大约1G的交换

我有另一台服务器,它有4G内存和8Gig交换以及类似的内存密集型应用程序。但在这里,交换的使用是非常微不足道的。大约100MB

我想知道什么是精确的条件或粗略的公式,Linux将根据这些条件将RAM中的进程内存交换到交换文件。 我知道这是基于swapiness因素。它还基于什么?交换文件大小?任何指向Linux内核文档/源代码的指针都将非常有用。

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

当系统内存不足时,内核会根据页面的使用情况开始交换页面。使用一个按w.r.t访问最近度排序的页面列表来确定哪些页面可以被交换(linux内核也有这样一个列表)

在交换过程中,Linux内核需要决定在内存中对页面进行核处理并将其发送到交换时要权衡哪些。如果它过于激进地交换文件系统页面,则需要从文件系统进行更多读取,以便在需要时将这些页面读回。但是,如果它更积极地交换进程页面,可能会损害交互性,因为当用户尝试使用交换掉的进程时,它们将不得不从磁盘读回。看到了一个很好的讨论

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

对于数据库应用程序,通常建议使用swappiness=0。(即使如此,也要在系统上测试不同的设置,以获得良好的值)

参考文献:


我看到很多人发表了主观解释。希望这里有一个更完整的答案

在2.6.28 Linux版本后的拆分LRU中,可交换性是一个乘数,用于任意修改计算的分数,以确定两个LRU中建立的压力

因此,例如,在一个没有剩余可用内存的系统上,现有内存的值是根据列为“活动”的内存量的比率和页面在进入非活动列表后提升为活动的频率来衡量的

在活动和非活动之间有许多页面升级/降级的LRU被大量使用

通常,当内存耗尽时,退出文件备份存储会更便宜、更安全,并且会自动获得200的修饰符(这使文件备份内存的价值比交换备份内存(其值为0)的价值高出200倍)

交换所做的是通过减去您为文件内存提供的交换数(默认值60)并将您作为乘数提供的交换值添加到anon内存中来修改此值。因此,默认交换使匿名内存的价值比文件内存高80倍(文件为200-60,anon为0+60)。因此,在一个耗尽所有内存的典型linux系统上,页面缓存的活动性必须是匿名内存的80倍,才能将匿名内存替换为页面缓存


如果将交换设置为100,则anon的修饰符为100,文件内存的修饰符为100(200-100)使两个LRU的权重相等。因此,在需要页面缓存的文件密集型系统上,如果anon内存没有页面缓存那么活跃,则anon内存将被交换到磁盘,以便为额外的页面缓存腾出空间。

术语可能已经改变,但在过去,“交换”意味着在“分页”时交换整个进程意味着交换单个内存页。大多数操作系统都进行分页,我能回忆起的唯一进行“真正”交换的操作系统是Unics。我仍然遇到一些老前辈,他们坚持旧的交换定义,但现在非常罕见。全过程交换在当前系统中是一种非常罕见的技术,“交换”开始遭受定义腐朽的折磨,成为一个无用的术语,它被重新定义为有用的术语,基本上与“分页”的意思相同。我偶尔会遇到被称为“全过程分页”的旧式交换这有点像是一个有趣的重新定义之轮,但人们往往会理解。对于共享库、写叉复制等,交换整个过程的确切含义变得有点模糊。根据记录,交换的数量与交换的频率无关。