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 вместо.

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