LINUX.ORG.RU

Что происходит за пару секунд до вмешательства OOM-киллера?

 ,


3

2

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

Через некоторое время (до минуты в среднем), вмешивается OOM-killer и отстреливает жрущий процесс.

При этом свопа на компьютере нету, поэтому интересно - с чем связаны тормоза? Когда был своп, всё было понятно по невыключающемуся индикатору жёсткого диска. Но без свопа причина тормозов не понятна абсолютно. Память либо есть, либо нету. Если нету, oom-killer должен сделать, что есть. Чего тормозит тогда всё?

★★★★★

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

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

Кстати в условиях когда кто-то тупо выжрал всю память киллер придёт весьма быстро, примерно как только закончится своп (можно посчитать сколько это секунд, порядка 100мб/с для нжмд)

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

У меня 12gb RAM, куда мне своп? Ну сделаю 4gb свопа, например, чем это поможет? Ну и в случае ахтунга, начнётся движение 4gb туда-сюда, а это 40 секунд на чтение, по минимуму.

Память постепенно выедается Хромом, а если вдруг надо запустить винду в виртуалке, она внезапно хочет лишних 2-3gb, которых внезапно может не оказаться.

Пока включил vm.oom_kill_allocating_task, посмотрим, может с ним будет веселее. Странно, что эта опция не по-умолчанию.

AngryElf ★★★★★
() автор топика

Наверняка, с попытками reclaim'а.

post-factum ★★★★★
()
Ответ на: комментарий от anonymous

Своп придуман не просто так.

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

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

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

anonymous
()
Ответ на: комментарий от dk-

Это правда обычная ситуация?! В венках такого в хр без свопа только помню.

Ну, регулярно встречаюсь.

Вообще, мутная логика, конечно. Программа делает allocate. Ядро, вместо того, что б послать к чёрту, зачем-то выделяет память, а потом, на фоне, начинает искать, кого б прибить...

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

Она будет всегда. Лишний кеш зачастую более полезен чем ненужные страницы в оперативной памяти.

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

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

Диск жужжит совсем не прозрачно.

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

Дешёвая она. На ноутах еще ладно, а на десктопе всегда есть лишний слот, в который можно ещё планку воткнуть. Не оптимизировать же хром, в самом-то деле :)

AngryElf ★★★★★
() автор топика

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

Falcon-peregrinus ★★★★★
()

- с чем связаны тормоза?

с тем что файловый кеш превратился в тыкву - памяти то для него нет, и как следствие, вырастает io нагрузка на диск (ага, опять)

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

с тем что файловый кеш превратился в тыкву - памяти то для него нет, и как следствие, вырастает io нагрузка на диск (ага, опять)

А, блин, да, само собой.

Спасибо.

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

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

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

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

без свопа - же все заканчивается достаточно быстро.

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

У меня 12gb RAM
Через некоторое время (до минуты в среднем), вмешивается OOM-killer и отстреливает жрущий процесс.

Это чем же ты его забивашь? Виртуалками?

Где-то слышал, что swap нужен в любом случае, но зачем - не помню, и не могу найти. Может обманывали.

И вообще, когда много памяти, я за zswap

Kroz ★★★★★
()

У меня при отключенном свопе система встаёт колом, когда при имеющемся с небольшими лагами высвапливает фоновые процессы и работает дальше. Ясное дело если в свап полезут активные процессы встанет колом что со свапом что без, но суммарно с ним шансов больше.

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

*шансов больше на нормальную работу, в смысле.

anonymous
()
Ответ на: комментарий от Kroz

Это чем же ты его забивашь? Виртуалками?

Да.

И вообще, когда много памяти, я за zswap

Прикольно. Только подумал о таком, а оно уже написано :)

AngryElf ★★★★★
() автор топика
Ответ на: комментарий от Falcon-peregrinus

Отключать своп - дурацкая идея.

Поддерживаю. Впрочем, отключение свопа сродни религии, лол.

DeadEye ★★★★★
()

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

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

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

нужно) настраивать.

ох лол, а работать то когда если все время «настраивать» этот ваш линукс?

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

То-то вендузятники занимаются порнографией вроде хранения свапа на рамдиске.

anonymous
()
Ответ на: комментарий от Deleted

ох лол, а работать то когда если все время «настраивать» этот ваш линукс?

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

Один раз осознал как работает подсистема, настроил и работаешь дальше всегда, в чём проблема? В частности у топикстартера сценарий использования компа отличается от общепринятого, default ему не подходит, логично что имеет смысл по другому его настроить. Большинству подходит default, меньшинство с малым ОЗУ или агрессивным его использованием нуждается в тюнинге, но документацию не осиливает и совершает дурацкие телодвижения по совету таких же дураков, например отключает свап. Это типа как мешать сердцу биться потому что стучит громко и отвлекает.

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

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

Это демагогия, типичная такая.

зы. за что ты мне нравишься - можно набирать тебе ответ из твоихже фраз.

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

Демагог демагога видит издалека, лол. Надеюсь по существу ты согласен. И вообще, тред закрыт и сейчас придёт ООМ киллер. Через пару секунд.

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

Демагог демагога видит издалека, лол.

10/10

Надеюсь по существу ты согласен.

С тем что есть люди тратящие свободное время на настройку линукса?

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

С тем что есть люди тратящие свободное время на настройку линукса?

С этим невозможно спорить. А есть те кто нет. К ним в итоге приходит ООМ киллер. И они приходят сюда.

Jameson ★★★★★
()

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

annulen ★★★★★
()

Вообще выше по треду правильно советуют, на десктопе лучше иметь своп. Пусть совсем маленький, пусть даже zram, но он все-таки нужен, из-за особенностей реализации работы с памятью в Linux.

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

Т.е. ты подтверждаешь что из-за тормозов свопа система будет тупить так что никто никуда не придет?

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

Т.е. ты подтверждаешь что из-за тормозов свопа система будет тупить так что никто никуда не придет?

Ну это как этот своп настроить. По дефолту так, да. Он начинает усираться в самый последний момент, когда уже и так всё плохо, и убийца тоже вязнет в тормозах. Это потому что при дефолтной стратегии свопинг есть чрезвычайная ситуация, позволяющая пользователю успеть до прихода киллера самому убить кого надо, а не кого нибудь. Как бе считается, что у большинства «достаточно» озу, и активный свопинг это следствие утечки памяти или перегруза задачами, например открытыми вкладками браузеров. Подразумевается что юзер их сам закроет как только начнётся тормозилово или убъёт потёкшую задачу. Тут хорош более высокий по приоритету своп в zram, позволяющий увидеть утечку или перегруз и принять меры до наступления адского ада.

На серверах с равномерной, но допускающей всплески загрузкой или неттопе с малым количеством озу разумнее другая стратегия. Пусть система подсирает в своп постоянно, малыми проциями и в фоне. Тут хороша zswap и стратегия немедленного активного вытеснения\подгрузки малоиспользуемых страниц, с использованием троттлинга, дабы дисковую подсистему монопольно не оккупировать, ну и понимание ограниченности возможностей неттопа.

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

Отлично, внимание вопрос: ситуация - кончается память (т.е. уже все лезет в своп, или начало тупить и скоро придет песецООМ киллер)

в этой ситуации что должна делать система:

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

- прибить злодея выдав справку о кол-ве трупов и продолжить работу

Ась?

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

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

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

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

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

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

Вам на винду, однозначно.

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

Мухаха, держаться неделями.

Все понятно, вопросов больше нет.

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

Все понятно, вопросов больше нет.

У меня есть. Аргументов не будет так как ты классический сферический демагог в вакууме? Или таки сподобишься эти штампы и ухмылочки развернуть?

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

Ядро, вместо того, что б послать к чёрту

Есть sysctl vm.overcommit_memory.

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

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

А причина мутной логики в том, что многие программы/библиотеки берут памяти больше, чем надо

Это я понимаю.

, если всем резервировать всю запрашиваемую ими память, то без swap'а совсем никак.

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

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

Я не уверен, как бы мне тут помог своп. Ну разве что эпичным тупняком вместо убийства лишних. А вот vm.oom_kill_allocating_task - видимо, то что надо.

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

Если что-то потекло, то течёт оно в своп, и самым жрущим будет именно оно. Только нужно сказать ядру, чтобы оно учитывало своп, а то оно его за память может не считать. Это немного увеличивает потребление памяти всеми процессами.

Можно конечно твоим способом, удвоить оперативку и отдать базе 25%.

anonymous
()
Ответ на: комментарий от Jameson

Что значит отличается от общепринятого?
К меня к примеру мать с компа ролилики на ютубе смотрит.
(К стати ютуб помещает ролики в ОЗУ, так что браузер может ркхнуть даже если открыта только одна вкладка :) )

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

вообще понятие свопа нынче устарело. оно имело смысл не когда «память была всего в пару раз быстрее жестких дисков», а когда память была 16Mb EDO 60ns или 32Mb SDRAM 66Mhz... вот в те времена можно было легко выйти за пределы RAM, и даже больше того - это было нормой.

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

Может у нас просто задач адекватных компам нету?

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

Если что-то потекло, то течёт оно в своп, и самым жрущим будет именно оно.

Нет, не будет. Жрут все воркеры по чуть-чуть. 100 воркеров по 100 мегабайт - это 10 гигабайт. База, например, отожрала 8 гигабайт. Всего на сервере - 16 гигабайт памяти. Соответственно, когда прийдёт OOM-killer, крайней окажется база, а не 100-мегабайтные воркеры.

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

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

i36_zubov
()
Ответ на: комментарий от AngryElf

Господи, да сделай ты своп на терабайт в таком случае, кто не даёт? Будет у тебя 100 воркеров по 10гб. Хотя можно было и заранее отследить, скажем, когда протекло только на 900 терабайт. В случае когда свопа нет, у тебя просто не будет этого запаса времени (воркеры вполне вероятно закончат к тому моменту или будут перезапущены).

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

Ой, гигабайт конечно же. В оригинале было «когда оно ещё не протекло на терабайт».

anonymous
()
Ответ на: комментарий от AngryElf

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

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