Я использую Ubuntu для запуска компьютерного моделирования материалов. Иногда вычисления превышают общую доступную память машины, 64 ГБ ОЗУ и начинают использовать своп. Когда это произойдет, Ubuntu просто остановится и необходимо перезагрузиться. Запуская те же симуляции с Linux Slackware, этого не произошло, вместо этого остановились симуляции, и у меня возникла ошибка в терминале, что-то вроде этого: «ошибка сегментации». Можно ли запустить симуляции в Ubuntu и преодолеть проблему остановок Ubuntu, как Slackware?
Спасибо.
Если вы получаете ошибки сегментации, когда вы запускаете программное обеспечение для моделирования в одной системе, и значительное замедление, когда вы запускаете его в другой, то ваше программное обеспечение для моделирования не предназначено для того, чтобы справляться с нехваткой памяти. Любая ошибка сегментации является признаком ошибки , и часто ошибки, которые вызывают ошибки сегментации, действительно являются ошибками, где поведение кода не определено . В разных системах он может действовать по-разному (неправильно).
Итак:
Если вы или кто-то, с кем вы работаете, написали программное обеспечение для моделирования, вы должны отладить его с надеждой на повышение производительности. Я бы рекомендовал начать с компиляции символов отладки (gcc -g ...
) и интерактивной отладки (например, в gdb
) в Slackware для получения трассировки стека сегментации неисправности.
Вы также должны отладить его, чтобы найти утечки памяти. Вы можете использовать Valgrind , Boehm GC, работающий в режиме обнаружения утечки , или множество других инструментов для этого.
Конечно, наиболее подходящий способ отладки будет зависеть от деталей того, как он работает и на каком языке он написан.
Если вы получили программное обеспечение для симуляции от совершенно другой стороны, вы должны сообщить об ошибке. Если вам доступны отладочная сборка или символы отладки, в отчете об ошибке будет полезно включить трассировку стека ошибки сегментации в системе Slackware.
Вся система не должна останавливаться. Это может указывать на ошибку в 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
.