The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Facebook открыл код для обработки ситуации нехватки памяти в системе

20.07.2018 11:56

Facebook опубликовал собственную реализацию обработчика нехватки памяти в системе (OOM, Out Of Memory), работающую в пространстве пользователя. Как и представленный в начале месяца проект earlyoom, разработка Facebook нацелена на более оперативное и выборочное завершение работы процессов, потребляющих слишком много памяти, на стадии до срабатывания OOM-обработчика ядра Linux. Код oomd написан на языке C++ и поставляется под лицензией GPLv2. Oomd уже используется в инфраструктуре Facebook и хорошо зарекомендовал себя при промышленных нагрузках (в частности, проект позволил почти полностью избавиться от возникновения на серверах длительных livelock-блокировок).

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

Поддерживается подключение различных модулей для определения нехватки памяти (oomdetector) и завершения процессов (oomkiller). В процессе работы для мониторинга за потреблением ресурсов используются cgroup2 и подсистема PSI (Pressure Stall Information), несколько дней назад предложенная для включения в состав ядра Linux. PSI разработан в Facebook и позволяет проанализировать информацию о времени ожидания получения различных аппаратных ресурсов для определённых задач или наборов процессов в cgroup.

В контексте OOM подсистема PSI позволяет выявить начало возникновения задержек из-за нехватки ресурсов на стадии когда система ещё не находится в критическом состоянии и не начинает интенсивно урезать кэш и вытеснять данные в раздел подкачки. Кроме оценки нагрузки на систему памяти в PSI также учитывается нагрузка на CPU и ввод/вывод. По сути PSI можно рассматривать как более информативный индикатор перегрузки и механизм для отслеживания изменения нагрузки во времени, более точно отражающий реальную ситуацию по сравнению с метрикой LA (Load Average).

Проведённые синтетические тесты показали, что реализация OOM-обработчика в пространстве пользователя продемонстрировала более высокую эффективность и надёжность, по сравнению со штатным OOM killer ядра Linux. Ниже на графиках приведено сравнение oomd и OOM killer при тестировании постепенного запроса процессом 2 Гб ОЗУ в течение 120 секунд в условиях нехватки памяти (значения выше 120 следует рассматривать как поведение, приводящее к снижению производительности).



  1. Главная ссылка к новости (https://code.fb.com/production...)
  2. OpenNews: Выпуск earlyoom 1.1, процесса для раннего реагирования на нехватку памяти
  3. OpenNews: Механизм уведомления приложений о нехватке памяти в системе
  4. OpenNews: Facebook открыл реализацию платформы и протокола маршрутизации Open/R
  5. OpenNews: Facebook открыл код платформы Detectron для распознавания объектов на фотографиях
  6. OpenNews: Facebook открыл систему распознавания речи Wav2Letter
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/48994-oom
Ключевые слова: oom, memory, oomd
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (57) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:04, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ну вот, а в прошлой новости earlyoom кто-то костылями называл. А оказывается метод вполне годный. Особенно вкусен PSI, удивительно, что раньше никто не додумался такое сделать. Если, что и называть костылём, так это LA, который на многопроцессорных системах бесполезное сферическое состояние в вакууме показывает.
     
     
  • 2.10, нах (?), 14:26, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +13 +/
    Ну вот, а в прошлой новости earlyoom кто-то костылями называл. А оказывается на таких костылях САМ Пейсбук ковыляет!

    поправил, не благодарите.

     
  • 2.19, Аноним (19), 16:18, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    У вас, видимо, галлюцинации - вы не можете отличить задачу от её решения, и решения друг от друга. Да, earlyoom костыль. Нет, это не значит что сабж костыль.
     
     
  • 3.26, Аноним (26), 16:47, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Оба - костыли. И оба хороши, так как плзволяют пациенту вылечить баг с плохой обработкой OOM.
     
  • 3.39, Аноним (39), 19:43, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Оба костыли. И вообще ЭВМ - набор костылей.
     

  • 1.2, iPony (?), 13:05, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вот это годно, и интересно.

    А то как посмотрел "Как и представленный в начале месяца проект earlyoom" - у меня грива встала от такого плохого кода...

     
     
  • 2.13, Аноним (26), 15:42, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Тем не менее, earlyoom прекрасно справляется со своей задачей.
     
     
  • 3.20, Аноним (19), 16:18, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Earlyoom вообще не справляется. А это очень даже может быть.
     
     
  • 4.22, Аноним (26), 16:26, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >Earlyoom вообще не справляется

    Дичь втираешь

     

  • 1.4, 123 (??), 13:28, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Под правильной лицензией.
     
     
  • 2.7, Аноним (7), 13:39, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Так предложенная же для включения в состав ядра Linux.
     
  • 2.8, Аноним (8), 13:53, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    столман считает GPLv2 не бого угодно, тут же столько дыр .. так что стоит писать - "не под той лицензией выпустили!"
     
  • 2.53, Аноним (53), 11:14, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Под неправильной. Правильные - BSD/MIT, а не это.
     
     
  • 3.60, Michael Shigorin (ok), 19:24, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Под неправильной. Правильные - BSD/MIT, а не это.

    О, у нас очередной желающий потратить кучу времени и написать вместо глупого комментария что-нить полезное в http://wiki.opennet.ru/LicenseComparison :)

     
     
  • 4.69, Аноним (69), 11:55, 25/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Но позвольте, в сравнении нет столбика "правильная лицензия".
     

  • 1.5, ryoken (ok), 13:29, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что-то сегодня прут новсти про работу с памятью. День что ли такой? :)
     
     
  • 2.37, Аноним (37), 19:19, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +6 +/
    День памяти!
     

  • 1.6, Тот еще аноним (?), 13:38, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Из-за нехватки памяти Facebook открыл код для обработки ситуации нехватки памяти.
     
     
  • 2.9, Аноним (9), 14:05, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Зришь в корень, мой брат от другой матери. Сначала создадут проблему индусо-кодом, а потом изобретают решение для нее. Но, исходная-то проблема жива!
     
     
  • 3.70, Аноним (70), 12:05, 13/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Это называется абстракции :)
    И да, любую проблему можно решить абстракциями, кроме проблемы слишком большого числа абстракций :)))
     

  • 1.11, Аноним (11), 15:08, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Сейчас придет Торвальдс и обзовет всех кто разрабатывал все эти костыли.
     
     
  • 2.27, Аноним (27), 16:49, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    пускай чинит ядерный оомк
     
     
  • 3.40, Аноним (39), 19:45, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Чтобы его починить надо половину ядра перелопатить. Потому что там не один баг и не одна подсистема глючит.
     
  • 3.45, Аноним (26), 23:53, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем теперь чинить ядро, если уже появились прекрасные костыли^W юзерспейсные предотвратители OOM?
     

  • 1.12, Аноним (12), 15:28, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А подводные камни есть?
     
     
  • 2.35, Вареник (?), 18:29, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Ну какие могут быть подводные камни в killянии серверных программ...
     

  • 1.14, Аноним (14), 15:51, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Netflix решил проблемы без oom, у них  есть большой спец по прокладке и профилированию.
     
     
  • 2.28, Cloud (ok), 17:06, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Brendan Greg ?
     
     
  • 3.29, Аноним (29), 17:15, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В точку! 😁
     
  • 3.44, Anonim (??), 23:41, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    напишите пожалуйста еще ссылки на годные блоги ;)
     

  • 1.15, Аноним (14), 15:53, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Почему то в FreeBSD с ARC таких проблем нет
     
     
  • 2.21, Аноним (19), 16:19, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет памяти, нет проблем.
     
  • 2.23, . (?), 16:29, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Почему то в FreeBSD с ARC таких проблем нет

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

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

     
  • 2.66, abi (?), 12:18, 23/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    На FreeBSD все гораздо веселее. У меня дома сервер с виртуалками и, значит, если виртуалка запущена и ничего не делает, то ее память через сутки оказывается целиком в свопе. Покуда своп есть, а свободная память идет под ARC. И, стало быть, виртуалки резко оживают, ARC не успевает сократиться, своп забит, в итоге - OOM.
     

  • 1.16, Аноним (26), 15:57, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Building and installing

    Note that oomd requires PSI to function. This kernel feature has not yet been upstreamed (as of 7/18/18).

    oomd currently depends on meson, libfolly, and jsoncpp. The dependency on folly will soon be removed (as of 7/18/18).

    Можете объяснить что это - PSI, meson, libfolly?

     
     
  • 2.18, Аноним (14), 16:12, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Psi - xmpp
     
  • 2.58, имя (?), 17:05, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Про PSI написано в новости, да и вообще там, откуда ты это скопипастил, есть ссылки на всё.
     

  • 1.17, Аноним (17), 16:07, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Понабрали пхпшников, а потом память течет
     
     
  • 2.24, Аноним (14), 16:32, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    hhvm течет всегда и не только pho но и hacklang
     

  • 1.25, Аноним (14), 16:36, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вместо open пусть в ядро запишут gc
     
  • 1.30, Аноним (30), 17:22, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +12 +/
    Странно, что фейсбук не ввел лайки для процессов. Чем больше лайков - тем выше приоритет :)
     
  • 1.32, vantoo (ok), 17:48, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    То есть теперь на десктропе будут как на Андроиде закрываться программы, которые давно не использовались?
     
     
  • 2.33, Аноним (26), 18:04, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да, час бездействия - получает SIGKILL.
     

  • 1.46, Аноним (26), 23:55, 20/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Верно ли, что эта штука не запустится на стабильных дистрибутивах, потому что в них еще не завезли PKI?
     
     
  • 2.47, Аноним (26), 00:13, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    PSI конечно же я имел в виду.
     

  • 1.49, Аноним (49), 02:00, 21/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Мне одному кажется, что проблема не в OOM, а в нерабочем свапе в новых ядрах?
     
     
  • 2.50, Аноним (26), 08:23, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В насколько новых? В 4.9 все прекрасно свопится.
     

  • 1.51, Аноне (?), 10:37, 21/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Тем временем отлаживал прогу в VS на оффтопике, где цикл уходил в бесконечность - приложение скушало всю память, и, традиционно, система зависла на минут 7, потом очень долго отмораживалась и выбросила наконец-то исключение.
    А под линью без свопа просто останавливается, почему-то не убивает процессы.
     
     
  • 2.52, Аноним (26), 10:47, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А разгадка проста:

    With or without swap it still freezes before the OOM killer gets run automatically. This is really a kernel bug that should be fixed (i.e. run OOM killer earlier, before dropping all disk cache). Unfortunately kernel developers and a lot of other folk fail to see the problem. Common suggestions such as disable/enable swap, buy more RAM, run less processes, set limits etc. do not address the underlying problem that the kernel's low memory handling sucks camel's balls.

     
     
  • 3.57, Аноним (57), 16:36, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А разгадка проста:
    > With or without swap it still freezes before the OOM killer gets
    > run automatically.

    Да ладно. Я без свопа сижу и фриз иногда даже не заметен.
    Всего-то нужно vm.pageout_oom_seq выставить на 2-3 вместо 10 по умолчанию.

     
  • 2.55, iPony (?), 12:52, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А вот если под линуксом был своп, то уже — пришлось бы делать хард ребут
     
     
  • 3.56, Аноним (26), 14:12, 21/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Alt + SysRq + K обычно хорошо срабатывает (если предварительно включена поддержка).
     
  • 2.62, letsmac (ok), 16:47, 22/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Пройтись статическим анализатором по оффтопику?
     
     
  • 3.63, Аноним (26), 17:02, 22/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нет.
     
  • 3.65, Аноне (?), 22:18, 22/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Я не за оффтопик. Я про зависон.
     

  • 1.64, Аноним (64), 21:58, 22/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Код oomd написан на языке C++

    Фи, как не современно!

     
     
  • 2.67, ымыныны (?), 16:37, 23/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Зато очень современно - писать с ошибками.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру