linux交换空间永远不会释放内存

Zai*_*ali 4 linux swap out-of-memory linux-kernel

我正在使用 Linux 内核 2.6.38,并且我正在运行一个分配 4GB 内存的进程,并且我有 4GB 的可用内存,所以当我运行我的应用程序时,它从交换空间分配了大约 0.5GB。但是,我的应用程序运行了很长时间并多次访问交换空间上的数据。

(已编辑)为了澄清我在做什么:

  • 我正在运行带有 4 GB RAM 的 Linux 2.6.38。

  • 在不运行任何应用程序的情况下,系统占用大约 500MB 的 RAM。

  • 我创建了一个简单的应用程序,它分配 4GB 的内存并在分配的内存中查找并多次更改该内存的值(循环 10 次迭代)。

  • 很明显,我需要交换空间才能运行应用程序。

  • 当我运行我的应用程序时,交换空间不断累积并在几次迭代后变满,并且进程被终止。

  • 进程被杀死后,交换空间也保持满了。

  • 我在更新的内核上测试了我的应用程序,它运行良好,交换空间不会累积。

这是内核版本 (2.6.38) 上的错误吗?有解决办法吗?

Rem*_*y J 5

我不确定我的回答会回答你的问题,但不久前我问过自己一个类似的问题。

总结一下,当 Linux 分配内存(RAM/SWAPP)时,它只在需要时才释放它。这意味着即使在进程终止后,分配的内存仍将保留,直到另一个进程需要空间。

但是,如果您想释放 SWAPP,您可以手动进行

sudo swapoff -a 
Run Code Online (Sandbox Code Playgroud)

不要忘记重新打开它

sudo swapon -a 
Run Code Online (Sandbox Code Playgroud)

您可以在该链接那个链接中找到更多信息


tha*_*guy 5

没有内存泄漏。

您假设当您的应用程序需要比可用内存更多的内存时,它的一部分将被写入交换。这不一定是真的。

系统可能(并且通常会)编写其他完全不相关的进程进行交换,因为它们当前未在使用中。

由于此交换空间不属于您的应用程序,因此在您的应用程序退出后它将继续使用。

这个交换空间可能会继续使用很长时间,因为 Linux 在有空闲 RAM 时不会抢先加载它们。