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 большой кусок.
Поэтому я добавил много пространства подкачки, и ошибка исчезла.
Спасибо всем, кто это прочитал.