Linux Mint: процесс Python получает "MemoryError" до того, как своп даже приблизится к своему полному использованию

Я пытаюсь запустить скрипт Python, который требует много виртуальной памяти. Я использую Linux Mint 17.3 64 bit и Python 2.7.

По мере роста процесса Python я вижу (с использованием free -m) объем использования ОЗУ, но объем используемого пространства подкачки фактически уменьшается.

Я попытался изменить vm.swappiness с 60 на 90, но это, похоже, не помогло.

Дело не в том, что пространство подкачки полностью не используется - часть его используется. Но он используется не так часто, как следовало бы.

Кстати, я в экземпляре VMWare.

Как я могу запустить этот большой процесс без MemoryError и без изменения кода?

Спасибо!

PS: Вот какой-то бесплатный вывод -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 ( Отладка с помощью трассировщиков syscall | stromberg.dnsalias.org). Я мог видеть, что это mmap'ing многократно небольшие куски, а затем прямо перед ошибкой это будет mmap большой кусок.

Поэтому я добавил много пространства подкачки, и ошибка исчезла.

Спасибо всем, кто это прочитал.

Другие вопросы по тегам