Система зависает при использовании слишком большого объема оперативной памяти даже при отключенной подкачке

Система зависает при использовании слишком большого объема оперативной памяти даже при отключенной подкачке

Когда я запускаю часть кода Python, который использует слишком много оперативной памяти, мой компьютер начинает так сильно зависать, что мне приходится делать жесткую перезагрузку. Чтобы исправить это, я отключил подкачку, предполагая, что OOM killer вмешается. Однако у меня все еще те же симптомы! То есть я слышу, как жесткий диск трясется, когда вся оперативная память используется, компьютер зависает, и мне приходится делать жесткую перезагрузку.

Что может происходить и как это исправить?

Моя система работает под управлением Ubuntu 14.04.2 LTS, 3.13.0-43-generic #72-Ubuntu SMP Пн 8 дек 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux с 8 ГБ оперативной памяти.

Мой /etc/fstab показывает

# / was on /dev/sda1 during installation
UUID=80919e96-e83b-4c88-b30e-8673e1faa3b4 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
#UUID=68064725-c1bb-4293-b8d1-45b2a42fb7b4 none            swap    sw              0       0

Более подробная информация

tail -n+1 /proc/sys/vm/overcommit_*
==> /proc/sys/vm/overcommit_memory <==
0

==> /proc/sys/vm/overcommit_ratio <==
50

cat /proc/sys/vm/oom_kill_allocating_task
0

Пример кода

Мне жаль говорить, что я не знаю, как сделать минималистский пример Python, который показывает эту проблему. Однако это неминималистский код, который определенно делает http://paste.ubuntu.com/11621823/. Просто измените значение "path" в коде и запустите его. На моей системе он использует всю оперативную память, а затем полностью замораживает систему.

решение1

Ваша проблема — это ваша проблема python code, и она не имеет никакого отношения к swap.

SwapПространство используется операционной системой, когда нагрузка на память увеличивается. Затем те процессы, которые в данный момент не используются, перемещаются в пространство подкачки, которое является разделом. Таким образом, больше памяти может быть освобождено для процесса, который в данный момент выполняется. Когда процессы, перемещенные в подкачку, используются, она перемещается из области подкачки обратно в память.

Таким образом, подкачка полезна в ситуациях, когда для запуска чего-либо требуется больше памяти, чем доступно свободного объема памяти.

Поскольку вы отключаете swap, это не решит вашу проблему, а только увеличит ее. Единственное решение вашей проблемы, которое я могу придумать, это либо оптимизировать ваш код Python, чтобы использовать меньше памяти, либо увеличить память на вашей машине.

Также было бы лучше, если бы вы разместили свой код здесь, чтобы люди могли помочь в его оптимизации.

Связанный контент