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

4
我正在使用Linux内核2.6.38,运行一个分配4GB内存的进程,并且有4GB可用RAM,所以当我运行我的应用程序时,它会从交换空间中分配大约0.5GB。然而,我的应用程序运行了很长时间,并多次访问交换空间中的数据。
(编辑) 为了澄清我的操作:
  • 我正在运行Linux 2.6.38,具有4 GB的RAM。

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

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

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

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

  • 进程被终止后,交换空间仍然保持满状态。

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

这是内核版本2.6.38的错误吗?有没有解决方法?

你的问题非常不清楚,但你可能可以尝试以下其中一种方法:使用内存更大的设备、减少一次性分配的内存或增加额外的交换空间。此外,你的进程还受到"swappiness"的影响,你可以尝试调整它以适应你的需求。 - ti7
2个回答

6

没有内存泄漏。

你假设当你的应用程序需要比可用的内存更多时,它的某些部分会被写入交换区。但这并不一定是真的。

系统可能(通常会)将其他完全无关的进程写入交换区,因为它们目前没有在使用中。

由于该交换空间并不属于您的应用程序,因此在您的应用程序退出后它仍将保持使用状态。

由于Linux不会预先加载它们,因此这个交换空间可能会长时间保持使用状态,即使有空闲的RAM。


5

我不确定我的回答是否能够回答您的问题,但我曾经也有过类似的问题。

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

但是,如果您想手动释放 SWAPP,可以这样做。

sudo swapoff -a 

别忘了重新打开它

sudo swapon -a 

您可以在此链接另一个链接找到更多有关IT技术的信息。这些文章将帮助您解决“Linux吃掉我的内存”的误解,更加通俗易懂。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接