我正在尝试运行需要大量虚拟内存的 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)我可以看到它一遍又一遍地映射较小的块,然后在出现错误之前它会映射一个较大的块。
所以我添加了大量交换空间,错误就消失了。
感谢所有阅读此文的人。