Может ли утечка памяти убить мой процесс? - PullRequest
0 голосов
/ 24 августа 2018

Это краткое описание моей проблемы:

Контекст:

Аппаратное обеспечение: Toradex Colibri VF61

Распространение: Angstrom v2014.12

Релиз ядра: 4.0.2-v2

Язык программного обеспечения: Qt / C ++

Проблема: Я разрабатываю приложение, которое должно работать не менее 2 недель на встроенном продукте. Моя проблема в том, что мой процесс выполняется в течение 5 дней с небольшой утечкой памяти, что я наблюдаю за «Top», а затем его убивают. Мой процесс превратился в зомби, как сказал мне Топ.

Попытка № 1: Я попытался исправить утечку памяти с помощью Valgrind, но некоторые «вероятно» утечки находятся в библиотеках, которые я использую в своей программе (многие из них являются malloc). Это очень большая работа, чтобы понять все библиотеки, и это не цель.

Я думаю, что утечка памяти составляет около 1% потерянной памяти в день, поэтому 15% теряются за 2 недели. Такая утечка является приемлемой для меня, потому что процесс не запустится через 2 недели, и встроенная система предназначена для этого процесса, у меня на машине не запущен какой-либо другой большой процесс. Мониторинг оперативной памяти показывает, что процесс занимает 30% ресурсов, поэтому, по оценкам, 45% через две недели.

Попытка № 2: Я спросил об управлении памятью в Linux и узнал об OOM-Killer. Я пришел к выводу, что OOM-Killer, вероятно, чувствовал, что мой процесс слишком долго работал с утечкой памяти, и убил его. Поэтому я установил переменную «oom_score_adj» моего процесса на -1000, чтобы OOM-Killer не мог убить мой процесс, и я попытался снова долго работать с утечкой памяти. Но на этот раз мой процесс превратился в «спящий» и не убитый, а непригодный для использования. Состояние сна было связано с сообщением об ошибке «Ошибка в« ./app »: malloc (): повреждение памяти (быстрое): 0x72518ddf»). Я точно указал, что в моем коде ноль malloc, только в библиотеках, которые я использую.

Вопросы:

Как вы думаете, возможно ли, что такой процесс, как OOM-Killer, может превратить мой процесс в зомби, потому что у меня утечка памяти и моя программа работает долго?

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

1 Ответ

0 голосов
/ 30 августа 2018

Относительно вашего первого вопроса, OOM Killer убьет один или несколько процессов после oom_score (высокое потребление памяти, менее важно для системы, ..) в случае, если для системы останется очень мало памяти.Поэтому, если OOM Killer убивает дочерний процесс вашего основного процесса, это превратит ваш основной процесс в зомби.

На ваш второй вопрос Linux переводит процесс в состояние ожидания, если ресурсы для этого определенного процесса недоступны.Но в вашем случае, если произошла утечка памяти и процесс потребляет много памяти, процесс будет скорее уничтожен, чем переведен в спящее состояние.

Используете ли вы UART для своего приложения?

ByКстати, существует также сообщество Toradex, где инженеры могут напрямую ответить на ваши вопросы.

С наилучшими пожеланиями, Яски

...