Ubuntu зависает при превышении памяти большой программой

Я использую Ubuntu для запуска компьютерного моделирования материалов. Иногда вычисления превышают общую доступную память машины, 64 ГБ ОЗУ и начинают использовать своп. Когда это произойдет, Ubuntu просто остановится и необходимо перезагрузиться. Запуская те же симуляции с Linux Slackware, этого не произошло, вместо этого остановились симуляции, и у меня возникла ошибка в терминале, что-то вроде этого: «ошибка сегментации». Можно ли запустить симуляции в Ubuntu и преодолеть проблему остановок Ubuntu, как Slackware?

Спасибо.

2
задан 7 September 2013 в 01:02

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.

0
ответ дан 7 September 2013 в 01:02

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

Похожие вопросы: