swap不启用

全部自动安装的,分的1g swap。平时看基本都是0%,物理内存八九十了也没启用,100%了才启用,这时候差不多也死机了(关注到物理内存高占用也不启用后特意测试的),那要他干啥用。
swappness改了100%,fstab改了uuid都一样

确实不需要。

我还记得我读过的安装指南上面说的是如果你的内存超过2g,你就可以不需要swap分区。
可那时我的内存才刚刚达到1g,而同时的硬盘空间已经百g起步了。

可见上古时代的硬件水平才需要swap分区。

现在还建议划分swap的,可能教程太旧了吧。

交换区主要是为了平等的回收机制,而不是为了紧急情况的「额外内存」。

这意味着,通常来说 vm.swappiness 只是一个比例,用来衡量在你的硬件和工作负载下, 回收和换回匿名内存还是文件内存哪种更昂贵 。设定的值越低,你就是在告诉内核说换出那些不常访问的 匿名页面在你的硬件上开销越昂贵;设定的值越高,你就是在告诉内核说在你的硬件上交换匿名页和 文件缓存的开销越接近。内存管理子系统仍然还是会根据实际想要回收的内存的访问热度尝试自己决定具体是 交换出文件还是匿名页面,只不过 swappiness 会在两种回收方式皆可的时候,在计算开销权重的过程中左右 是该更多地做交换还是丢弃缓存。

考虑以不同等级的负载检查命令 free -mcat /proc/zoneinfo 的输出。如果你的负载过重,交换并不能帮助你。

1 个赞

那个建议确实有问题,但你也可能是太富有,内存大小超过了99%的用户。

从2015年开始,我的电脑一直是32GB物理内存,中间换过电脑,但内存容量不变。

从2015年到现在,从不熟悉linux到现在基本能自行安装维护,使用过多个不同的swap方案,但从没使用过swap=64GB的方案(两倍物理内存),我只使用了16GB。一方面是这个方案感觉太浪费硬盘空间了;另一方面,是觉得32GB物理内存应该完全够用了,不需要那么多swap空间。

后续,swap从16GB的分区改为4GB的文件,再改为现在的2GB的分区。总结的一个经验是,swap不能没有,但2GB可能就够用了。我遇到的一个真实场景,就是进行大量文件跨硬盘拷贝时,比如200GB,在32GB物理内存仅占用了8GB不到的情况下,系统就开始启用swap,只不过不多,大概只有不到200MB好像(记不太清楚了)。这一度让我怀疑,系统把那么多内存留着到底有啥想法。

(如果没有swap,好像会出现一些奇怪的问题;概率不高,但无法避免,包括swap类型为文件的情况)

之前我一直感觉是linux的内存管理有问题,尤其是Linus本人在配新电脑时说编译内核有异常,认为是内存不支持ECC导致的,我一直存疑。现在,我觉得内存管理比较复杂可能只是一个原因,不能完全排除内存管理有问题的情况。

swap容量的具体分配方案,新手一定是无法精确判断的,至少我在读了上面3楼libresociety openworld提供的链接后,仍然没有头绪,只明白了一点,就是swap存在的目的不是为了缓解内存不足,或者不单是这个目的。

那么,是不是可以提供一个相对更容易让新手理解的方案,以方便新手在安装系统时采纳,比如:

家用电脑,swap超过8G意义不大,1GB起步,稳妥起见可以先尝试4G,然后看情况调整。

或者,给出几个详细的方案示例,让新手参考选择?

(从3楼给的链接看,真想搞定swap容量,经验性的东西比技术更有意义…只不过,挑战性比硬盘分区的空间分配要高很多)
(我的32GB物理内存+2GB swap分区,应该可以算是一种具体方案)
(我有扩充内存到64GB的计划,swap可能会考虑4GB。但直到现在,从来没出现过swap超过1.8GB的情况<或者1.6GB>,不知道是不是系统强制不可以占用全部swap空间。)

6.1 新的内存管理策略大概会让大量数据复制好一点儿。不过我还是建议复制大量数据时用 systemd-run 限制内存使用量。明确知道用不上的东西就不要让它进缓存了。