Ubuntu зависает при превышении памяти большой программой
Я использую Ubuntu для запуска компьютерного моделирования материалов. Иногда вычисления превышают общую доступную память машины, 64 ГБ ОЗУ и начинают использовать своп. Когда это произойдет, Ubuntu просто остановится и необходимо перезагрузиться. Запуская те же симуляции с Linux Slackware, этого не произошло, вместо этого остановились симуляции, и у меня возникла ошибка в терминале, что-то вроде этого: "ошибка сегментации". Можно ли запустить симуляции в Ubuntu и преодолеть проблему остановок Ubuntu, как Slackware?
Благодарю.
1 ответ
Если вы получаете ошибки сегментации, когда вы запускаете программное обеспечение для моделирования в одной системе, и значительное замедление, когда вы запускаете его в другой, то ваше программное обеспечение для моделирования не предназначено для того, чтобы справляться с нехваткой памяти. Любая ошибка сегментации является признаком ошибки, и часто ошибки, которые вызывают ошибки сегментации, действительно являются ошибками, в которых поведение кода не определено. В разных системах это может действовать по-разному (неправильно).
Так:
Если вы или кто-то, с кем вы работаете, написали программное обеспечение для моделирования, вам следует отладить его с надеждой на повышение производительности. Я бы рекомендовал начать с компиляции символов отладки (
gcc -g ...
) и отладка в интерактивном режиме (например, вgdb
) в Slackware для получения стекового следа ошибки сегментации.Вы также должны отладить его, чтобы найти утечки памяти. Для этого вы можете использовать Valgrind, Boehm GC, работающие в режиме обнаружения утечек, или множество других инструментов.
Конечно, наиболее подходящий способ отладки будет зависеть от деталей того, как он работает и на каком языке он написан.
Если вы получили программное обеспечение для симуляции от совершенно другой стороны, вы должны сообщить об ошибке. Если вам доступны отладочная сборка или символы отладки, в отчете об ошибке будет полезно включить трассировку стека ошибки сегментации в системе Slackware.
Могут быть некоторые вещи, которые вы можете сделать, чтобы завершить симуляцию в Ubuntu.
Вся система не должна останавливаться. Это может указывать на ошибку в Ubuntu, возможно, в ядре. Даже массивный дисковый ввод-вывод должен лишь умеренно замедлять работу Ubuntu. Вы можете сообщить об ошибке в ядре Ubuntu по этому поводу.
Если вы хотите сделать это, сначала прочитайте это. Тогда вы начнете процесс сообщения об ошибках, запустив ubuntu-bug linux
(или если это система только для командной строки, apport-cli linux
).
Чтобы обойти эту проблему, вы можете попробовать ограничить доступную память, указав ограничения в limits.conf
, Смотрите также этот пост в блоге.
Если проблема связана с приоритетом процессора, вы можете запустить симуляцию с более низким приоритетом с помощью nice
(например, nice -n 15 command...
) или опустите его во время работы с renice
,
Если вы можете использовать машину вообще, так как она замедляется и симуляция должна быть остановлена (иногда виртуальная консоль реагирует лучше, чем GUI), вы можете попытаться убить процесс с помощью KILL
сигнал (это самый сильный способ убить процесс):
kill -KILL command
Вот command
это всего лишь одно слово, имя исполняемого файла. Все исполняемые файлы с таким именем будут уничтожены (следовательно, " killall
"). Если у вас есть PID (от ps
), вы можете, конечно, бежать kill -KILL PID
вместо.