我正在使用Linux内核2.6.38,我正在运行一个分配4GB内存的进程,并且我有4GB的ram可用,所以当我运行我的应用程序时,它从交换空间分配大约0.5GB。但是,我的应用程序运行了很长时间,并多次访问交换空间上的数据。
(编辑)的 澄清我在做什么:
我正在运行Linux 2.6.38,内存为4 GB。
在没有运行任何应用程序的情况下,系统占用大约500MB的RAM。
我创建了一个简单的应用程序,它分配4GB的内存并寻找分配的内存并多次更改该内存的值(循环10次迭代)。
显然我需要交换空间才能运行应用程序。
当我运行我的应用程序时,交换空间不断累积并在几次迭代后变满,并且该进程被终止。
在进程被终止后,交换空间也会保持满。
我在更新的内核上测试了我的应用程序并且工作正常,交换空间不会累积。
这是这个内核版本(2.6.38)的错误吗?它有解决方法吗?
答案 0 :(得分:2)
我不确定我的回答会回答你的问题,但我不久就问了一个类似的问题。
总结一下,当Linux分配内存(RAM / SWAPP)时,它只在需要时释放它。这意味着即使在进程终止后,分配的内存仍将保留,直到另一个进程需要空间。
但是,如果您想要释放SWAPP,您可以手动执行
sudo swapoff -a
不要忘记将其重新打开
sudo swapon -a
找到更多信息
答案 1 :(得分:2)
没有内存泄漏。
您假设当您的应用程序需要的内存超过可用内存时,部分内存将写入交换。这不一定是真的。
系统可能(通常会)将其他完全不相关的进程写入交换,因为它们目前尚未使用。
由于此交换空间不属于您的应用程序,因此在您退出应用程序后它将继续使用。
这个交换空间可能会进一步使用很长一段时间,因为当没有RAM时,Linux不会抢先加载它们。