Как остановить Ubuntu от убийства долгой программы - PullRequest
0 голосов
/ 22 февраля 2019

Я занимаюсь исследованиями с большими данными.Я стараюсь уменьшить вычислительные и временные сложности, используя параллельное программирование и эффективные пакеты.Однако мои программы на R или MATLAB требуют много времени для ответа.Большую часть времени я сталкиваюсь с проблемой уничтожения моей программы из ОС.Есть ли возможность заставить ОС, особенно Ubuntu, не убивать мой процесс?Я рассмотрел соответствующие вопросы, такие как следующие ссылки.Но я не нашел подходящих предложений.

Ubuntu убивает мои вычисления

Остановить ОС, чтобы убить мой процесс

1 Ответ

0 голосов
/ 22 февраля 2019

Ubuntu не просто случайно перезапустится, как вы могли ожидать в Windows.

Более вероятная причина в том, что у вас либо произошел сбой (из-за некоторой утечки памяти или проблемы с доступом в вашем коде), либо у вас не хватает памяти в вашей системе, и это вызывает сбой программы.В результате Matlab или R закрывается и выглядит как «Ubuntu убил мою программу», когда на самом деле Matlab или R вылетал из-за собственной внутренней ошибки.

FWIW Я видел сбой Matlab (когда у меня заканчивается RAM) и segfault.

Надлежащее решение этой проблемы - диагностировать, почему это происходит.Для этого вам нужно профилировать ваш код: https://www.mathworks.com/help/matlab/ref/profile.html

В частности,

profile on
% Long running code... 

Затем через некоторое время нажмите CTRL + C, чтобы остановить ваш код, а затем напишите profile viewer.Вероятно, это поможет вам отследить проблемный код (я забываю, отслеживает ли Matlab использование памяти, но я подозреваю, что это проблема здесь).Возможно, через короткое время вы уже можете увидеть проблему.

Если это ПОЛУЧИТ проблему с памятью, которая является результатом роста некоторой матрицы без ограничений, то вам нужно будет изменить свой код для ее обработки.Мне пришлось выполнять много длительных симуляций (занимая несколько дней) во время моей докторской диссертации, и я должен был найти хорошие способы сохранения своей работы в промежуточных точках, чтобы я мог отслеживать прогресс и восстанавливать результаты в случае сбоя компьютера.(Как ни странно, я тогда работал на Windows, и, следовательно, проблема перезагрузки Windows была реальной).

Как правило, вы обнаружите, что можете структурировать свой код следующим образом:

for i = 1...
    // Do something
    // Save to a file with a descriptive pattern 
    // Don't try to save everything, just save the results of a iteration
end  

// Now that everything has run, 
// let's load all of those files and generate some plots 
for file in files:
   // Fancy plots
end

Я давно не писал Matlab, но этот протокод должен дать вам хороший стартточка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...