Answers:
从内核2.6.28开始,Linux使用最近最少分裂(LRU)页面替换策略。具有文件系统源(例如程序文本或共享库)的页面属于文件缓存。没有文件系统支持的页面称为匿名页面,由运行时数据(例如,为应用程序保留的堆栈空间等)组成。通常,属于文件高速缓存的页面从内存中逐出的成本较低(因为可以在需要时从磁盘简单地读取这些页面) 。由于匿名页面没有文件系统的支持,因此除非程序有交换空间来存储它们,否则它们必须一直保留在程序需要的内存中。
常见的误解是交换分区会以某种方式降低系统速度。没有交换分区并不意味着内核不会从内存中逐出页面,而只是意味着内核对于要逐出哪些页面的选择较少。可用的交换数量不会影响使用的数量。
Linux可以应对交换空间的不足,因为默认情况下,内核内存记帐策略可能会过量使用内存。不利之处在于,当物理内存耗尽时,内核无法将匿名页面交换到磁盘时,内存不足杀手(OOM-killer)机制将开始杀死消耗内存的“流氓”进程,以释放内存用于其他过程。
该vm.swappiness
选项是一个修饰符,用于更改换出文件缓存页面之间的平衡,而使用匿名页面。文件高速缓存具有200的任意优先级值,并从中vm.swappiness
扣除修饰符(file_prio=200-vm.swappiness
)。默认情况下,匿名页面以60(anon_prio=vm.swappiness
)开始。这意味着,在默认情况下,优先级权重有利于匿名页面(中脱颖而出适度anon_prio=60
,file_prio=200-60=140
)。该行为mm/vmscan.c
在内核源代码树中定义。
给定vm.swappiness
的100
,优先级将等于(file_prio=200-100=100
,anon_prio=100
)。如果不希望将文件高速缓存中的页面逐出匿名页面,则对于I / O繁重的系统来说这是有意义的。
相反vm.swappiness
,0
将设置为to 将防止内核从文件高速缓存中逐出匿名页面,而转而使用匿名页面。如果程序自己进行大部分缓存,则这可能很有用,某些数据库可能就是这种情况。在台式机系统中,这可能会改善交互性,但缺点是I / O性能可能会受到影响。
默认值很可能被选择为这两个极端之间的近似中间值。与任何性能参数一样,调整vm.swappiness
应基于与实际工作负载相当的基准数据,而不仅仅是直觉。
问题在于,没有一个默认值可以满足所有需求。将swappiness选项设置为10可能是适用于台式机的设置,但是默认值60可能更适合服务器。换句话说,需要根据用例(桌面与服务器,应用程序类型等)来调整可交换性。
此外,Linux内核将内存用于磁盘缓存,否则将不使用RAM,这既无效又无意。将磁盘数据保存在缓存中意味着,如果某些内容再次需要相同的数据,则很可能会从内存中获取数据。从那里获取数据比从磁盘再次获取数据要快得多。swappiness选项是一种机制,Linux内核更愿意换出到磁盘以减少磁盘缓存。是从缓存中删除旧数据还是换出某些程序页面?
本文也可能为该主题提供一些启示。特别是,如何估计交换趋势。
在以上答案中添加更多细节。
随着我们越来越多地使用VM,Linux主机可能是这些云环境之一上的VM。在示例1和示例2中,我们对应用程序的运行以及它们消耗了多少RAM都有很好的了解。3,不是很多