清空交换空间是否安全?

我注意到过去三天我的交换空间一直保持在410 MiB。这正常吗?如果需要清除,应该如何操作?我的总内存为3.69 GiB,交换空间为1.33 GiB。

这是非常正常的。就像RAM一样,交换空间用于临时存储系统和应用程序文件。它会不断地被清除和写入。在重新启动时,它将完全被清除。这不是问题,这就是交换空间的工作原理。 - Raffa
谢谢 Raffa!!! - Snxw
完全安全地擦除您的交换空间和内存以供交换使用,请使用 sswap 命令查看手册,输入 # man sswap。如果您想要安全擦除内存,请使用 sdmem 命令查看完整手册,输入 # man sdmem。 - user643653
好的,谢谢。我没有关于那些的手册。man swap或者man sdmem。不过,有关于mkswap、swapoff、swapon等的手册。所以我可能会在那里找到更详细的解释。 - Snxw
@Raffa 关于"交换空间用于临时系统和应用程序文件"的说法是完全错误的。交换空间用于存储最少使用的活动内存页面。 - heynnema
要能够使用sswap和sdmem,您可以安装secure-delete软件包,命令为# apt-get install secure-delete。它支持许多用于安全擦除的工具。 - user643653
@heynnema 不是内存块“也称为页面并存储在交换空间中”用于临时系统和应用程序文件吗? - Raffa
@Raffa 前半部分是正确的,后半部分不正确。Swap对系统和应用程序的文件没有概念,也不关心它们。它只关心"最少使用的活动内存页面"。 - heynnema
@heynnema "最少使用的活动内存页面"不包含且用于临时系统和应用程序文件吗? :) - Raffa
@Raffa 不行,这只是个粗略的例子。你有一个应用程序,它初始化视频屏幕,然后在屏幕上显示图案。初始化代码只会被调用一次。之后,图案绘制代码会持续运行。突然出现了另一个消耗更多内存的应用程序,系统必须决定如何为新应用程序腾出空间。系统检查并发现,第一个应用程序的初始化代码已经很久没有被使用过了,于是将这些初始化代码所占用的内存页面移到交换空间,并将其保留在那里,除非再次需要。这里并没有涉及到文件的知识。 - heynnema
@heynnema 你的观点很清晰且正确,但是从RAM到交换空间中来回移动的确实是“临时系统和应用程序文件”。换句话说,简单来说就是为了回答OP的初学者类型问题。非常感谢你的评论。只是请不要让我感到错误,当我并没有错的时候。 :) - Raffa
@Raffa,将页面临时文件移动到/从交换空间的区别非常明显。页面是正确的,而文件则不是。这是一个根本性的区别,如果你继续说/认为是文件,我将不得不对你或任何人提出异议,并表示你是错误的。抱歉。 :-) - heynnema
1@Raffa 另一个要点是...未使用的内存被用作文件磁盘缓冲区。文件缓冲区可以包含文件。 - heynnema
2个回答

交换空间会根据需要自动填充或清空;您不需要刷新、清除或擦除它。即使您没有使用完所有的内存,Linux也会获取它认为是最少使用的活动内存页面,并将它们放入交换空间;这样,它们在需要时就可以立即使用。
如果您希望的话,可以调整swappiness参数

感谢回答K7AAY。我刚刚把swappiness改成了15,因为发现默认值是60。我的内存非常有限,但不知道为什么Firefox几乎占用了600 MiB的内存。不确定这是否正常,所以下一步我会调查一下。 - Snxw
K7AAY 我不认为这是交换空间的正确用法。交换空间是用来存储内存页面,以防止内存溢出(这将导致内核恐慌)。要使用交换出的页面,它们必须被复制回系统内存,这与直接访问内存相比非常缓慢。因此,系统会将那些在不久的将来极不可能被使用的页面存储在交换空间中。@Snwx 现今的浏览器使用了荒谬的大量内存。600MiB 并不算异常。 - danzel
@danzel 请查看 https://haydenjames.io/linux-performance-almost-always-add-swap-space/,其中部分内容指出:Linux内核将把几乎不使用的内存页面移动到交换空间中,以确保在内存中为更频繁使用的内存页面提供更多可缓存的空间(页面是内存的一部分)。 - K7AAY
@Snxw将你的vm.swappiness设置为15对于4G内存和1G交换空间来说是完全错误的。 - heynnema
3@K7AAY 关于“Linux会去获取它认为最有可能需要的文件,并将它们放入交换空间”的说法是完全错误的。Linux并不会将文件移动到交换空间,而是将内存页面移到交换空间中。 - heynnema
@heynnema 已校正,谢谢。 - K7AAY
1@K7AAY 小问题...交换用于存储最少使用的活动内存页面。 - heynnema

如果你使用以下命令,冲洗交换区是安全的:

sudo swapoff -a && sudo swapon -a

-a 代表 --all 交换设备)
如果RAM中有足够的空间,swapoff 将会将交换区的页面刷新到内存中的页面。否则,它将以错误结束,这将停止第二个命令。
如果您正在使用的应用程序在交换区中有页面,这会使其变慢,您可能需要刷新交换区。
否则,内核将自动处理此问题,所以大多数情况下,不需要这样做。