Linux Mint:在交换接近完全使用之前,Python 进程出现“MemoryError”

Linux Mint:在交换接近完全使用之前,Python 进程出现“MemoryError”

我正在尝试运行需要大量虚拟内存的 Python 脚本。我使用的是 Linux Mint 17.3 64 位和 Python 2.7。

随着 Python 进程的增长,我可以看到(使用 free -m)RAM 使用量增加,但实际使用的交换空间量似乎减少

我尝试将 vm.swappiness 从 60 更改为 90,但似乎没有帮助。

这不是交换空间完全没用的问题 - 其中一些正在使用。但它的使用量可能没有达到应有的水平。

顺便说一句,我在 VMWare 实例中。

如何在不发生 MemoryError 且不更改代码的情况下运行这个大型进程?

谢谢!

PS:这里有一些 free -m 输出:

$ while : ; do free -m; date; echo; sleep 10; done
cmd output started 2016 Fri Aug 19 08:47:39 AM PDT
             total       used       free     shared    buffers     cached
Mem:          7968       4764       3203         31        215        335
-/+ buffers/cache:       4214       3754
Swap:         8189       3452       4737
Fri Aug 19 08:47:39 PDT 2016

             total       used       free     shared    buffers     cached
Mem:          7968       4880       3087         31        215        343
-/+ buffers/cache:       4321       3646
Swap:         8189       3451       4738
Fri Aug 19 08:47:49 PDT 2016

             total       used       free     shared    buffers     cached
Mem:          7968       4982       2985         31        215        343
-/+ buffers/cache:       4423       3544
Swap:         8189       3449       4740
Fri Aug 19 08:47:59 PDT 2016

答案1

事实证明,尽管该进程一开始增长缓慢,但后来却突然增长(或试图增长)很多,并达到内存不足的状况。

我能够用 strace 来验证这一点(使用系统调用跟踪器进行调试 | stromberg.dnsalias.org)我可以看到它一遍又一遍地映射较小的块,然后在出现错误之前它会映射一个较大的块。

所以我添加了大量交换空间,错误就消失了。

感谢所有阅读此文的人。

相关内容