2017-04-16 185 views
-1

我正在使用Linux内核2.6.38,并且我正在运行一个分配4GB内存的进程,并且我有一个4GB的RAM,所以当我运行我的应用程序时,它将分配大约0.5GB来自交换空间。但是,我的应用程序运行很长时间并且多次访问交换空间的数据。linux交换空间永远不会释放内存

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

  • 我运行Linux 2.6.38,4 GB的RAM。

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

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

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

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

  • 在进程死亡后,交换空间仍然保持满。

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

这是这个内核版本(2.6.38)的错误吗?有没有修复它?

+0

你的问题很不清楚,但你至少可以做到以下一种:使用具有更多内存的设备,一次分配更少的内存,添加额外的交换空间..你的过程也受到[swappiness](https ://en.wikipedia.org/wiki/Swappiness)“,您可以根据自己的需要进行修改。 – ti7

回答

0

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

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

但是,如果你想释放SWAPP你可以做手工

sudo swapoff -a 

不要忘记重新打开它

sudo swapon -a 

您可以找到那个linkthat one

更多信息
1

没有内存泄漏。

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

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

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

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