LINUX.ORG.RU
ФорумTalks

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

 


1

2

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

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

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

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



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

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

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

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

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

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

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

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

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

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

Ядро в курсе и хитрит.

Это так усложнено в целях защиты от криворучек? Зря!

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

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

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

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

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

Как раз таки используется. И довольно активно.

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

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

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

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

у меня странная вещь тут была. я на ноуте сначала пробовал федору - она фризилась, если хром съедал всю память или память+своп. а сейчас поставил freebsd и хром продолжает работать, даже, когда своп заполнен. я фряхин top не смог сопоставить с линуксовым и так и не понял, что сейчас происходит и почему все работает.

Mem: 448M Active, 1273M Inact, 985M Laundry, 823M Wired, 364M Buf, 397M Free

это что? свободная RAM при том, что в своп стекла большая часть?

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

я по наблюдениям это говорю, а не от балды. у меня на некоторых конфигурациях свопа вообще нет. он не нужен. и я много лет программирую и админю, у меня этих наблюдений более чем достаточно.

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

у меня на некоторых конфигурациях свопа вообще нет.

вопрос, работают ли они при этом оптимально. это надо хотя бы /proc/meminfo видеть и знать тип нагрузки.

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

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

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

и что у тебя на этом сервере в первую очередь используется cpu,mem,disk? что сервер делает? у него выделенная задача или это свалка из вм?

crypt ★★★★★
()

почему OOM может убить процесс, который не виновен?

Почему это невиновен, процесс захотел памяти когда её нет, значит виновен. Ну вот есть у тебя на железке сервак, который обрабатывает запросы и бд которая хранит данные. И вот внезапно у тебя куча народа прибежела на сервак, а по бд в этот момент запустили отчет за 2 месяца. И кто из них виновен а кто нет?

Отсюда мораль: не жмоться на память.

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

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

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

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

ну ясно...

а если сервер ушёл в своп - это, считай, он умер для юзера, практически.

грустно мне это читать. ну вот возьмем твой абстрактный форум. представь, что у тебя память на 30% занята кешем диска, на 30% кешем базы, на 40% веб.

в часы, когда форум особенно посещаем, вебкод начинает использовать 60%. теперь сможешь сказать, какая память пойдет на вытеснение? дисковый кеш. если своп более быстрый, чем основное хранилище, это позволит вытеснить дисковый кеш туда и быстро к нему обратиться. с твоим же принципом сервер кеш потеряет и начнет считывать страницы с диска заново и будет работать медленней. т.е. в часы нагрузки ему наоборот дисковый кеш может быть более необходим, но ты его придушила.

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

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

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

это просто значит, что сервер не справляется и надо добавлять ему памяти.

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

ты попутал системный своп ... и кэш

по-моему я ничего не попутал

это просто значит, что сервер не справляется и надо добавлять ему памяти

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

это просто значит, что сервер не справляется и надо добавлять ему памяти

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

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

я ничего не писала про работу. у меня нет такой привычки.

а уход сервера в своп - это смерть сервисов.

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

Как киллер выбирает жертву, если oom_score всех процессов равен нулю? Убивает случайный процесс?

Скор может быть у всех нулевым, если памяти много, и запущено много мелких процессов, и скор ни одного процесса не доходит до единицы.

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

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

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

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

К примеру массив, из которого, с 99% вероятностью, так и не понадобится читать данные, вполне разумно скинуть в своп; убрать его тоже нельзя, потому что есть 1%.

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