Hug*_*ugo 120 linux kernel swap
我刚刚在 Linux 上阅读了一些关于 swappiness 的东西。我不明白为什么默认设置为 60。
根据我的说法,这个参数应该设置为 10 以减少交换。交换在我的硬盘上,所以它比我的记忆慢得多。
他们为什么要这样配置内核?
Tho*_*man 146
从内核 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将设置为将阻止内核从文件缓存中驱逐匿名页面以支持页面。如果程序自己进行大部分缓存,这可能很有用,某些数据库可能就是这种情况。在桌面系统中,这可能会提高交互性,但缺点是 I/O 性能可能会受到影响。
默认值很可能被选为这两个极端之间的近似中间值。与任何性能参数一样,调整vm.swappiness应基于与实际工作负载相当的基准数据,而不仅仅是直觉。
小智 9
问题是没有一个默认值可以满足所有需求。将 swappiness 选项设置为 10 可能是桌面的合适设置,但默认值 60 可能更适合服务器。换句话说,swappiness 需要根据用例进行调整 - 桌面与服务器、应用程序类型等。
此外,Linux 内核将内存用于磁盘缓存,否则不会使用 RAM,这既不高效也不符合预期。缓存中的磁盘数据意味着如果某些东西再次需要相同的数据,它可能会从内存中获取它。从那里获取数据比再次从磁盘获取数据要快得多。而 swappiness 选项是一种机制,Linux 内核更喜欢换出到磁盘而不是缩小磁盘缓存。它应该从缓存中删除旧数据还是应该换出一些程序页面?
这篇文章也可能对这个话题有所了解。特别是,如何估计交换趋势。
小智 5
在上面的答案中添加更多细节。
随着我们越来越多地使用 VM,Linux 主机可能是这些云环境之一上的 vm。在示例 1 和 2 中,我们对正在运行的应用程序以及它们消耗了多少 RAM 有了很好的了解。3、没那么多