linux swap space永远不会释放内存

时间:2017-04-16 23:47:06

标签: linux linux-kernel out-of-memory swap

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

(编辑)的 澄清我在做什么:

  • 我正在运行Linux 2.6.38,内存为4 GB。

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

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

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

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

  • 在进程被终止后,交换空间也会保持满。

  • 我在更新的内核上测试了我的应用程序并且工作正常,交换空间不会累积。

这是这个内核版本(2.6.38)的错误吗?它有解决方法吗?

2 个答案:

答案 0 :(得分:2)

我不确定我的回答会回答你的问题,但我不久就问了一个类似的问题。

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

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

sudo swapoff -a 

不要忘记将其重新打开

sudo swapon -a 

您可以在linkthat one

找到更多信息

答案 1 :(得分:2)

没有内存泄漏。

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

系统可能(通常会)将其他完全不相关的进程写入交换,因为它们目前尚未使用。

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

这个交换空间可能会进一步使用很长一段时间,因为当没有RAM时,Linux不会抢先加载它们。