LINUX.ORG.RU
ФорумTalks

Объясните для тупых дебилов: почему OOM может убить процесс, который не виновен?

 


1

2

Кажется объяснение в том, что ядро не видит глобальной картины, а видит только отдельные brk() (попытки выделения памяти), которые происходят почти всегда в любом безобидном процессе.

Допустим процесс 1 работает давно и делает brk() с частотой 1 Гц, а процесс 2 запустили только что и он делает brk() с частотой 50 Гц и отожрал почти всю свободную память. Но вызов brk(), первым столкнувшийся с концом памяти, по случайности исходил из процесса 1 и потому замочат именно его, а не 2?

В ядре такой тупой алгоритм? Или есть попытки сохранять жизнь тем, кто давно и законопослужно живёт, а убивать наиболее быстро растущих по отношению к времени своей жизни?

Про OOM слышу истории, что постоянно невиновные страдают. Ну типа, «Вася, если ты запустишь на серваке свой говнопроцесс на 256 гигов и мой скромный на 36 гигов убьёт OOM, то я тебя зарублю топором!» В админских былицах постоянно мрут какие-то невиновные от OOM. Или это старые сказки уже и он научился убивать качественно.



Последнее исправление: hlamotron (всего исправлений: 3)
Ответ на: комментарий от catap

так виртуальную и выжрать физически невозможно. там 59 бит на шине, как правило. это совершенно космическое число. пока есть своп - всё будет сыпаться туда. и размер свопа обычно во много раз превышает размер рамы. по сути, для работы системы важен лишь объём реальной памяти.

актуальность киллера возрастает на системах без свопа.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 2)
Ответ на: комментарий от catap

да что угодно. проц, память, IO.

но если сервер ушёл в своп - это уже какбэ и не сервер. серверные приложения не рассчитаны на своп. конечно, он там обычно всё равно имеется. но для нормальной быстрой работы все активные страницы должны быть в раме.

если сервер выжирает своп - надо менять железо или серьёзно пересматривать нагрузку на машину.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

Если у вас на машинах есть swap то проблемы как бы уже есть.

Далее, какую именно память ограничивает cgroups?

catap ★★★★★
()
Ответ на: комментарий от catap

ту, какая у тебя есть. если есть своп - то виртуальную. но если его отключить (что чаще всего и делают), то реальную.

и да, все серверные приложения дают возможность управления потреблением памяти. иначе админы были бы просто не нужны. более того, для совсем запущенных случаев есть виртуалки. так что если на сервере начал работать OOM-киллер - это признак криворукости админа.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

ту, какая у тебя есть. если есть своп - то виртуальную. но если его отключить (что чаще всего и делают), то реальную.

Я правильно понимаю вашу мысль что если в машине нет swap то виртуальная память равна реальной (или ее нет совсем?)

и да, все серверные приложения дают возможность управления потреблением памяти. иначе админы были бы просто не нужны. более того, для совсем запущенных случаев есть виртуалки. так что если на сервере начал работать OOM-киллер - это признак криворукости админа.

можно рассказать как вы будете управлять потреблением памяти например в контексте ejabberd или varnish/nginx/apache?

catap ★★★★★
()
Ответ на: комментарий от catap

естественно, если на машине нет свопа, то у неё есть только RAM. машин без RAM не бывает. читайте теорию, в общем. я культпросветом заниматься не хочу. мне лень.

да, апач лучше не ставить на сервер. зело неэффективен. рекомендую nginx. в любом случае, nginx ставить придётся, потому что апач, торчащий наружу - это очень, очень плохая идея. но даже его, скотину, можно заставить жрать меньше памяти, ограничив количество потоков и коннектов. про жаббер ничего не могу сказать - не содержала. но думаю, что он должен быть маленький и лёгкий (если не написан на каком-нибудь говнопистоне, конечно). и проблем с памятью у него быть не должно вообще.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

естественно, если на машине нет свопа, то у неё есть только RAM. машин без RAM не бывает. читайте теорию, в общем. я культпросветом заниматься не хочу. мне лень.

к сожалению стоит начать с себя :) Если у машины нет SWAP то это никак не связано с overcommit памяти, можешь попробовать крайне простую программу на C которая выделит 100500 гигабайт памяти, и она будет запускаться не завися от наличия или отсуствия SWAP. А вот изменение overcommit может сильно изменить ее поведение.

да, апач лучше не ставить на сервер. зело неэффективен. рекомендую nginx. в любом случае, nginx ставить придётся, потому что апач, торчащий наружу - это очень, очень плохая идея.

Почему? Я понимаю что в тебе говорят мемы времен apache 1.3 когда все его использовали как application server с cgi/mod_php и на его фоне nginx с fastcgi и php-fmp был куда более лучший.

Сейчас же они примерно одинаковы в производительности. Там есть нюансы, но они не критичны.

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

Т.е. мы переходим не к управлению памятью, а к управлению нагрузкой, да?

про жаббер ничего не могу сказать - не содержала. но думаю, что он должен быть маленький и лёгкий

определение маленький и легкий?

(если не написан на каком-нибудь говнопистоне, конечно). и проблем с памятью у него быть не должно вообще.

А как python связан с проблемами с памятью?

Может быть ты из тех у кого java тормозит?

catap ★★★★★
()
Ответ на: комментарий от catap

Т.е. мы переходим не к управлению памятью

нет. всё о той же памяти. апач в плане КПД очень слаб. в смысле, производительность в отношении сожранных ресурсов. и я говорю про второй апач. впрочем, разницы никакой. nginx намного более шустр и менее жруч.

определение маленький и легкий?

меньше десяти мегабайт памяти при высокой производительности. да, я увлекаюсь сишечкой и ассемблером :)

А как python связан с проблемами с памятью?

тупой и жручий до ресурсов. одним словом, типичное ненужно.

Iron_Bug ★★★★★
()
17 апреля 2020 г.
Ответ на: комментарий от Iron_Bug

так виртуальную и выжрать физически невозможно

Возможно, если специально выжирать.

пока есть своп - всё будет сыпаться туда

Вовсе не обязательно. Киллер может приходить при полупустом свопе.

размер свопа обычно во много раз превышает размер рамы

Нет. Есть тенденция к уменьшению размера свопа относительно размера рамы.

hakavlad ★★★
()
Ответ на: комментарий от Iron_Bug

Разные тестовые базы данных как нефиг могут в свопе жить, т.к. фигак-фигак на продакшене нельзя, а база должна быть реальной, если у тебя хайлоад, а поднимать разработчикам полное зеркало условной базы данных с письмами на почтовом ящике условного гугла даст 2-ух кратную нагрузку на бюджет гугла. Так что будешь с медленным свопом, если это надо работать и терпеть.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

ты так пишешь, будто я поддерживаю это УГ. отнюдь! я его никогда не использовала. единственный раз я видела нехватку памяти - это было в эмбеддеде, где разработчики железа слишком пожидились на проц и там просто система едва ворочалась и периодически срабатывал системный киллер. но это в целом был неправильный подход, а не доказательство нужности киллера.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Я как-то YAGF решил на тысячу сканов натравить, узнал много нового. А вообще у меня не редко памяти не хватает из-за обработки больших и не очень больших данных, да надо бы плашек доткнуть эдак до 64 гигов - но там и пекарню надо менять, а вроде если аккуратно делать и не лениться и обрабатывать данные не разом, а пачками, то и на 16 гигах жить можно.

А у тебя просто задач нет, чтобы софт использовать. Писать и вылизывать скрипты, которые 1 раз отработают по потреблению памяти, ну такое себе.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

ха! у меня как раз последние лет цать - только серверный софт. который работает с хай лоадом, с большими объёмами данных. 24/7. и ничего не течёт. со скриптами я вообще дел почти не имею, потому что терпеть не могу скриптятину.

ну я и сама много чего админю. и тоже не течёт ничего нигде. наверное, руки из нужного места растут :)

если я обнаруживаю утечку памяти - я отлаживаю софт, пока её не найду и не устраню. конечно, я использую только софт на С/C++, чтобы можно было его отлаживать нормально.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

ну я и сама много чего админю. и тоже не течёт ничего нигде. наверное, руки из нужного места растут :)

Я могу специально собрать тебе csv с миллионами записей (но не раньше июля, т.к. те, с которыми я сейчас вожусь, содержат персональные данные и представляют коммерческий интерес), в котором надо будет очистить ячейки в зависимости от их вида разными способами, полученный результат как-то обработать, а на выходе получить таблицу с цифрами (изначально в ячейках текст, из которого надо извлечь начальные формы ключевых слов (определить их тоже надо автоматически, например, на основе частоты встречаемости или TF/IDF пройтись), разобрать их, посчтиать и закодировать их комбинации/развернуть ячейки в несколько) из 100 000 полей на несколько миллионов строк. Можно делать такое и на сишке, не спорю, за месяц получится всё нормально отладить, победить юникод, смайлики и прочее Нͬ̿͏̦̙̼̹͙͉͉ё͚̮̻͋͜п̘̰͚̙̲̤̳̩ͨ̇̊̍͗ͧ̇̈̎͡о̵͙̯̦̦̘͆ͥт̴̴̧̝̤̗̗̖ͧͮͩ̑̊ͣр̴̢̰̤̼̖͖̯͉̤ͪͤ́̀е̻̪̠̫͙̟̠͔̭̐̃ͤ̌̋б̮͚̘̗̜̟ͤͣ̚͝с̢̞̬͕̳͈̖͚̫̽ͥ̄̿̂̍͒̾͢т̧̼̣̫̜̥̟͛ͣ̑̄ͧ̕в̛̰̹̜̮ͯо̨͇̘̳̉̅ͬ͛ͩ̉, которое, увы, тоже встречается, благо текст пишут люди, но на питоне на порядки быстрее - можно за вечерок разобрать без напряга, особенно если воспользоваться каким-нибудь OpenRefine. При этом, сам скрипт по обработки особого интереса не предоставляет, может он раз в год будет запускаться для обновления модели, интересны именно обработанные данные (но надо экспериментировать с их представлением и тем, что именно считать важным), по которым будет обучена модель, которая уже потом должна быстро работать.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

понимаешь, сишке неважно, какая там у тебя кодировка. это просто последовательности байт. и такие софтины пишутся за день. но я такой фигнёй не занимаюсь. если у тебя обработка статистики - проще это загнать в базу и обработать вполне себе стандартным софтом для БД.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Можно и в базу, но OpenRefine лучше, там регулярки удобнее. А на сишке ты давай для начала 2 трудности реши - превращение Нͬ̿͏̦̙̼̹͙͉͉ё͚̮̻͋͜п̘̰͚̙̲̤̳̩ͨ̇̊̍͗ͧ̇̈̎͡о̵͙̯̦̦̘͆ͥт̴̴̧̝̤̗̗̖ͧͮͩ̑̊ͣр̴̢̰̤̼̖͖̯͉̤ͪͤ́̀е̻̪̠̫͙̟̠͔̭̐̃ͤ̌̋б̮͚̘̗̜̟ͤͣ̚͝с̢̞̬͕̳͈̖͚̫̽ͥ̄̿̂̍͒̾͢т̧̼̣̫̜̥̟͛ͣ̑̄ͧ̕в̛̰̹̜̮ͯо̨͇̘̳̉̅ͬ͛ͩ̉ в непотребство и приведение текста:

понимаешь, сишке неважно, какая там у тебя кодировка. это просто последовательности байт. и такие софтины пишутся за день. но я такой фигнёй не занимаюсь. если у тебя обработка статистики - проще это загнать в базу и обработать вполне себе стандартным софтом для бд. 
понимать сишка неважно какой там у ты кодировка это просто последовательность байт и такой софтина писать за день но я такой фигня не заниматься если у ты обработка статистика просто это загонять в база и обрабатывать вполне сам стандартный софт для БД

На питоне второе в десять строк кода делается.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

я культпросветом заниматься не хочу. мне лень.

И не в состоянии. Хватит туфту нести.

beastie ★★★★★
()
Ответ на: комментарий от Iron_Bug

я и сама много чего админю

но все-таки чувствуется, что ты программист в душе. там выше катап и ребята правильные вопросы задают. с т.з. админа все немного сложнее в смысле памяти.

crypt ★★★★★
()
Ответ на: комментарий от peregrine

Нͬ̿͏̦̙̼̹͙͉͉ё͚̮̻͋͜п̘̰͚̙̲̤̳̩ͨ̇̊̍͗ͧ̇̈̎͡о̵͙̯̦̦̘͆ͥт̴̴̧̝̤̗̗̖ͧͮͩ̑̊ͣр̴̢̰̤̼̖͖̯͉̤ͪͤ́̀е̻̪̠̫͙̟̠͔̭̐̃ͤ̌̋б̮͚̘̗̜̟ͤͣ̚͝с̢̞̬͕̳͈̖͚̫̽ͥ̄̿̂̍͒̾͢т̧̼̣̫̜̥̟͛ͣ̑̄ͧ̕в̛̰̹̜̮ͯо̨͇̘̳̉̅ͬ͛ͩ̉

Ты что творишь блин, я чуть линукс переустанавливать не начал, думал у меня иксы поехали

curufinwe ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.