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) 上的错误吗?有解决办法吗?
我不确定我的回答会回答你的问题,但不久前我问过自己一个类似的问题。
总结一下,当 Linux 分配内存(RAM/SWAPP)时,它只在需要时才释放它。这意味着即使在进程终止后,分配的内存仍将保留,直到另一个进程需要空间。
但是,如果您想释放 SWAPP,您可以手动进行
sudo swapoff -a
Run Code Online (Sandbox Code Playgroud)
不要忘记重新打开它
sudo swapon -a
Run Code Online (Sandbox Code Playgroud)
没有内存泄漏。
您假设当您的应用程序需要比可用内存更多的内存时,它的一部分将被写入交换。这不一定是真的。
系统可能(并且通常会)编写其他完全不相关的进程进行交换,因为它们当前未在使用中。
由于此交换空间不属于您的应用程序,因此在您的应用程序退出后它将继续使用。
这个交换空间可能会继续使用很长时间,因为 Linux 在有空闲 RAM 时不会抢先加载它们。
| 归档时间: |
|
| 查看次数: |
4179 次 |
| 最近记录: |