После пяти месяцев разработки опубликован (https://github.com/rfjakob/earlyoom/releases) выпуск фонового процесса earlyoom 1.1 (https://github.com/rfjakob/earlyoom/), который периодически (10 раз в секунду) проверяет объем доступной памяти (MemAvailable, SwapFree).Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGKILL) завершит работу процесса, наиболее активно потребляющего память (имеющего самое большое значение /proc/*/oom_score), не доводя состояние системы до очистки системных буферов и мешающего работе своппинга (обработчик OOM (Out Of Memory) в ядре срабатывает когда состояние нехватки памяти уже достигло критичных значений и системе не реагирует на действия пользователя).
Earlyoom поддерживает отправку уведомлений о принудительно завершённых процессах на рабочих стол (с помощью notify-send), а также предоставляет возможность определения правил, в которых при помощи регулярных выражений можно задать имена процессов, завершение которых предпочтительно (опция --prefer) или остановки которых стоит избегать (опция --avoid).
Основные изменения в новом выпуске:
- Устранена уязвимость (https://github.com/rfjakob/earlyoom/commit/ab79aa3895077676f...), которая позволяет подставить shell-код при выводе всплывающих уведомлений через манипуляции с именем процесса;- Время сна после неудачного завершения процесса снижено с 10 до 1 секунды;
- Всплывающие уведомления теперь отправляются после завершения процесса, а не перед;
- В дополнение к "-h" добавлена опция "--help";
- Исправлена проблема, приводящая к неверному отображению имен процессов во всплывающих уведомлениях;
- Исправлено возможное деление на ноль при использовании опции "-S".URL: https://github.com/rfjakob/earlyoom#changelog
Новость: https://www.opennet.ru/opennews/art.shtml?num=48927
Пахнет жуткими костылями
Да ладно -- наоборот, всё наконец-то стало логично и полезно. Не просто система что-то киляет, а пользователь указывает что можно давить, а что нет. Инструмент стал полезным, а не бомбой со случайно срабатывающим таймером.
> Не просто система что-то киляетох уж эти ламерюги ушастые! рэкомэндую для просветления:
Но, естественно, убивает он не всё подряд, а подчиняясь определённым правилам:
- Мы должны потерять минимум работы
- Мы должны освободить много памяти
- Мы не должны убивать невиновных в пожирании большого количества памяти
- Мы хотим убить как можно меньше процессов (в идеале - один)
_Результат работы должен быть предсказуемым
Далее идёт подсчёт очков виновности процессов и процессы (или потоки), набравшие больше всего баллов, жестоко убиваются.Вот так идёт подсчёт очков:
- Считаем RSS процесса
- Добавляем RSS всех дочерних процессов
- Если процесс долго живёт, то значение уменьшается
- Если у процесса niceness больше 0, то значение увеличивается.
- Если есть флаги CAP_SYS_ADMIN или CAP_SYS_RAWIO, результат уменьшается
- Смотрится знаечение /proc/<pid>/oom_adj, которое может задавать пользователь, чтобы повышаться сопротивляемость OOM Killer'у. Вроде как это уже deprecated и нужно использовать oomscore_adj.Естественно, это не точный алгоритм, цель написанного - дать представление, от чего зависит выбор кандидата на убийство
А мне кажется хорошая вещь. Поможет прибить хром который прожорлив.
Хром прожорлив из-за кучи "шпионских" наворотов, которые мониторят твою деятельность, чтобы подставлять более эффективную рекламу (ибо гугл живёт по большей части на рекламе), но это другая история
Это костыль, победить Хром, можно только его удалением ;)
Хром вкладки фризит когда оперативки мало. Так, что в лучшем случае будет прибита открытая в данный момент вкладка.
Вы делаете мне смешно. Квантум как за норму отъедает у меня 2.5 гига при обычном использовании и умирает на стримах, в то время как хром спокойно все переваривает.
То есть, анон, ты пользуешься программой, которая тебя не удовлетворяет, чтобы испытать боль?
> Устранена уязвимость, которая позволяет подставить shell-код при выводе всплывающих уведомлений через манипуляции с именем процесса;по ссылке способ, который лечит симптом а не болезнь -- говорит о том что программисты так и не вкурили в чём же проблема у них с shell оказалась
Любой код на шелл это уже проблема.
Ну используй HTML5
Есть, вообще-то, простая мониторилка http://godrb.com/ , где можно сказать что делать с процессом и при каких условиях. И да, прибивать по превышению уровня использования процессора или оперативки, оно тоже умеетСравнил бы кто....
earlyoom заточен под одну задачу, написан на Си и справляется со своей задачей лучше
Жесть конечно, линукс при нехватке памяти просто колом встает, даже в терминал не дает буквы вводить, в винде такого нет.
Жадное ядро которому ВСЕГДА мало оперативки...
> в винде такого нетЕсть. Винда самым простым образом динамически увеличивает swap, когда оно ей нужно. Уткнувшись в предел (место кончилось, например) также встаёт колом.
но это, если и происходить - то гораааааааздо позже чем у линя!
Волшебные свойства Винды позволяют брать запас памяти из ниоткуда, ага.
Да, но это очень редко происходит. А вот в Лине, как всегда, все через ср...у: бывает, что-то важное делаешь, а тут бац и все зависло намертво и откачка только через кнопочку reset. Да и если система начинает свопить, она всеравно гараздо хуже себя ведет, чем на Windows. Даже если начинает свопить, и до полного использования памяти очень далеко, всеравно часто зависает намертво.
Откачака через SysRq: alt+sysrq+f (force oom_killer)
Это если пользователь не забыл kernel.sysrq вернуть в 1 или хотя бы в X | 0x40, а то в дистрибутивах нынче по-дефолту почему-то идут какие-то маски, которые не дают пользователю почти ничего полезного.
> Это если пользователь не забыл kernel.sysrq вернуть в 1 или хотя бы
> в X | 0x40, а то в дистрибутивах нынче по-дефолту почему-то
> идут какие-то маски, которые не дают пользователю почти ничего полезного.Вы хотели сказать "в дистрибутивах нынче по-дефолту почему-то
> идут какие-то ОБОИ, которые не дают пользователю почти ничего полезного."! ;)
> Это если пользователь не забыл kernel.sysrq вернуть в 1 или хотя бы
> в X | 0x40, а то в дистрибутивах нынче по-дефолту почему-то
> идут какие-то маски, которые не дают пользователю почти ничего полезного.Леннарт Великолепный говорил вам о ненужности и несовершенности этого старого, немодного инструмента! Будте внимательней, не поддавайтесь соблазну ереси и не заставляйте братьев действовать излишне жестко и радикально, спасая ваше вечное цифровое ядро!
https://lists.freedesktop.org/archives/systemd-devel/2015-Fe...
> When the user presses Ctrl-Alt-Del more than 7x within 2s an immediate reboot is triggered. This useful if shutdown is hung and is unable to complete, to expedite the operation.
>> Это если пользователь не забыл kernel.sysrq вернуть в 1 или хотя бы
>> в X | 0x40, а то в дистрибутивах нынче по-дефолту почему-то
>> идут какие-то маски, которые не дают пользователю почти ничего полезного.
> Леннарт Великолепный говорил вам о ненужности и несовершенности этого старого, немодного
> инструмента! Будте внимательней, не поддавайтесь соблазну ереси и не заставляйте братьев
> действовать излишне жестко и радикально, спасая ваше вечное цифровое ядро!
> https://lists.freedesktop.org/archives/systemd-devel/2015-Fe...
>> When the user presses Ctrl-Alt-Del more than 7x within 2s an immediate reboot is triggered. This useful if shutdown is hung and is unable to complete, to expedite the operation.Хотел было попробовать успеть нажать, тем более что файловые системы размонтирует, но вовремя вспомнил, что у меня нет systemd!
Только не то что размонтировать — он распознать нажатия-то эти наверняка не успеет, если система уже встала колом от дефицита памяти.
Нет. Дело не в увеличении свопа. На лине своп увеличивает демон swapspace. А всё виснет именно из-за кривого ядра, которое слишком тупо свопит, а своп ВННЗАПНО слишком медленный. Этот долго висящий в баг-трекере баг всё никак пофиксить не могут, вернее не хотят - у разрабов машины с дофигища оперативы, их нищeбρoдопроблемы не волнуют.Винда же умеет понимать, что свопить нельзя ни в коем случае, поэтому на ней проблема так не проявляется. Да при 100% занятой оперативы чуть-чуть подтормаживает, но чтобы винда встала так, как линь, где помогает только кнопка резет, даже клава не реагирует - так бывает крайне редко. У меня однажды своп выжрал на винде 5 оператив, когда я запустил Идею (с тех пор Идеей не пользуюсь), но система была живой. Когда я мигрировал на линукс, просто 10 вкладок в файрфоксе = смертельное зависание системы. На винде фф прекрасно держал 60 вкладок без какого-либо эфекта на систему.
просто 10 вкладок в файрфоксе = смертельное зависание системы.... УЖЖОСС
Да, да, и такое бывает! Так что пилите нормальный swap.
Может пора просто нормальные программы научиться пилить? Посмотрите в сторону id Tech, внезаптно у меня не 8 гигабайт памяти, 4 гигабайта улетает в своп, но система даже глазом не моргнёт и игра не подвисает. Совпадение? Не думаю.
20 вкладок в фоксе 5 плагинов 800Мб потребления. ЧЯДНТ? Выкидывайте свой фокс и переходите на нормальный. И система намертво зависает только в тех случаях когда программа пытается использовать не только всю доступную память но и весь своп - коненчно она зависнет, в венде так же (что логично, место то кончилось).
а у меня под виндой новый фаерфокс грузит проц на 100 процентов без открытых вкладок - только начальный экран. При этом ни одного дополнения не стоит, все настройки сброшены в умолчание.
Пришлось откатится на старую версию и отключить обновления.
А под линуксом на хз-сколько-летнем хромбуке я не помню когда что-то зависало.
> а у меня под виндой новый фаерфокс грузит проц на 100 процентов
> без открытых вкладок - только начальный экран. При этом ни одного
> дополнения не стоит, все настройки сброшены в умолчание.
> Пришлось откатится на старую версию и отключить обновления.
> А под линуксом на хз-сколько-летнем хромбуке я не помню когда что-то зависало.Так это проблема у винды или у фаерфокса?
я к тому, что не надо тормоза фаерфоксом мерять
Аналогично, при запуске Firefox с десяток секунд 100% загрузка CPU и диска.
Проблема в синхронизации закладок, только установленный Firefox быстро стартует.
Вы, видимо, виндой не пользовались толком. Доводилось сводить видео под семеркой на коре дуба с 2гб оперативки (дедлайн горел, единственное что было под рукой) - система висла намертво.Лялихом пользуюсь 5 лет - в крайнем случае, фризились иксы (при этом всегда можно было переключиться в tty и прибить все что нужно)
На системе с 2Гб оперативки линукс тоже еле ворочается, ФФ уже с парой вкладок начинает тормозить.
kill 1 и нет проблем.
Оно умеет в drop_cache и sync ?
>Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGKILL) завершит работу процесса, наиболее активно потребляющего памятьОх неужели наконец-то кто-то это сделал, ПРАЗДНИК блин.
Постоянно виснет система из-за того что кончается свободная оперативка, а свап на ССД включать не хочу ибо дорогой ССД быстро убъётся постоянными перезаписями. Раз в неделю забываю посматривать на датчик свободной оперативки, и какое-нибудь особенно жручее приложение выжирает всю оперативку и система виснет наглухо, помогает только перезагрузка с кнопки.
На Жидхабе только Арч с Демьяном, так что ждём ебилдов и пакетов в Альте.
>ждём ебилдов и пакетов в Альтеjust make install
Прямо розовая мечта администратора высоконагруженного сервера.
zramswap или как его нынче -- не смотрели? На ALTSP здорово выручал.
zram неплох, но не оптимален в сочетании с обычным свопом: если он имеет более высокий приоритет, то в zram в первую попадут наименее полезные страницы, которые останутся бестолково висеть в оперативке (пусть и в сжатом виде), а при приоритете ниже, чем у обычного свопа, эффект от него будет заметен только после того, как обычный своп будет полностью забит.zswap я бы вообще назвал вредной вещью: суть его в том, что он перехватывает страницы, направленные в своп, жмёт и кладёт в… page cache; и всё бы ничего, но в случае memory pressure все эти страницы начинают резко распаковываться для записи на физический носитель, и вследствие write amplification система встаёт колом порой сильнее, чем если бы у неё просто закончилась память.
>>Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGKILL) завершит работу процесса, наиболее активно потребляющего память
> Ох неужели наконец-то кто-то это сделал, ПРАЗДНИК блин.
> Постоянно виснет система из-за того что кончается свободная оперативка, а свап на
> ССД включать не хочу ибо дорогой ССД быстро убъётся постоянными перезаписями.У нас, свободных бздунов, это делается так (для некоторых, особо одаренных знатоков и петросянов опеннета: естественно, только через пуссиэкзе и все такое, никак иначе! Ну, вы поняли…)
man protect
NAME
protect – protect processes from being killed when swap space is
exhaustedEXAMPLES
Mark the Xorg server as protected:pgrep Xorg | xargs protect -p
% more /etc/sysctl.conf
vm.disable_swapspace_pageouts=1
vm.pageout_oom_seq=2
kern.sched.preempt_thresh=224
kern.sched.interact=10# что значит
% sysctl -d vm.pageout_oom_seq vm.disable_swapspace_pageouts kern.sched.preempt_thresh kern.sched.interact
vm.pageout_oom_seq: back-to-back calls to oom detector to start OOM
vm.disable_swapspace_pageouts: Disallow swapout of dirty pages
kern.sched.preempt_thresh: Maximal (lowest) priority for preemption
kern.sched.interact: Interactivity score threshold% config -x /boot/kernel/kernel|grep SWAP
options NO_SWAPPING
В итоге, даже при сильном "перегрузе" всех ядер гуй остается приятно отзывчивым, а если что-то начинает отжирать память "как не в себя", то фриз до прихода ООМ убивца можно даже не заметить (опция, ускоряющая каст ООМ killer:
vm.pageout_oom_seq=2, вместо =10)Заценка:
/usr/bin/time -l python -c '{x:str(x)*(x**x**x) for x in range(100000000)}'
time: command terminated abnormally
15,35 real 1,66 user 3,86 sys
5047412 maximum resident set size
3 average shared memory size
11 average unshared data size
119 average unshared stack size
1259462 page reclaims
12 page faults
0 swaps
0 block input operations
0 block output operations
0 messages sent
0 messages received
0 signals received
25 voluntary context switches
700 involuntary context switches
zsh: killed /usr/bin/time -l python -c '{x:str(x)*(x**x**x) for x in range(100000000)}'Если что - лицензия позволяет утянуть^W позаимств^W вдохновиться, нам не жалко ;)
Да и так всё есть - от vm.swappiness и прочих vm.overcommit_memory до /proc/XXX/oom_adj
> а свап на ССД включать не хочу ибо дорогой ССД быстро убъётся постоянными перезаписямиЖесть какая... Вроде 2018-ый год.
У меня чего-то на ноутбуке 2013 года с жалкими 4 ГБ ОЗУ совсем не убился из-за свопа.
Аккумулятор уже сильно стал сдавать, шлейф диска (может от падений) стал иногда отваливаться, край ноутбука люфтил. Экран слегка промялся от клавиш и подоблез.
А сам SSD по ресурсу записи ещё хоть куда. Но вот всё остальное не так.
Забыл дописать: клавиши перестали нажиматься из-за объедков под ними, некоторых клавиш уже нет. Кулер забит волосами, на крышке отпечаток от кружки с кофе.
Не. Не ем за компьютерами. Максимум пью какой-нибудь смузи через соломинку.
А кофе тоже не пью - вредно.
говорят, кофе надо пить по шесть чашек в день, иначе умрёшь от болезней и вреда
zramswap штука хорошая если у вас памяти впритык
хрень - иногда хуже с этим поделием чем без него. проверено долгими истязаниями на пратике, когда оно начинает бадаться с vm...
>оно начинает бадаться с vm.Что, простите? Нельзя ли чуть подробнее?
Кстати, ZRAM в качестве swap-раздела: мифы и плохие практики
- zram жрет процессор (на самом деле издержки ничтожны, а плюсы от сокращения дискового I/O огромны)
- степень сжатия обычно небольшая (при загрузке памяти браузерами степень обычно от 3 до 4, это очень неплохо)
- путать disksize и mem_used_total
- никогда не знаешь когда зависнет (на самом деле практически никогда не зависнет, если использовать nohang)
- исользовать низкий vm.swappiness (zram - это быстрый своп, не нужно его так бояться, как свопа на HDD)
- дроч на lz4 (lz4 не всегда дает большую производительность в сравнении с lzo, но практически всегда дает значительно меньшую степень сжатия)
- использование дефолтного vm.min_kbytes_free (повышение этого показателя в 2-3 раза уменьшает количество фризов при перекате в своп)
- выставлять небольшой размер disksize (например, убунтовский zram-config выставлеят disksize размером 1/2 MemTotal, что очень мало, можно спокойно делать disksize размером 2 MemTotal)
- выставлять какие-либо лимиты, используя mem_used_max (the maximum amount of memory zram have consumed to store the data) - размер хранимых данных итак ограничен с помощью disksize.
гений практичности, напиши плиз с какими параметрами запускать modprobe (или как там сейчас модно?)
С дефолтными: modprobe zram. Потому что теперь zram многопоточен из коробки, кучу устройств можно не делать.
Мастхэв, без него (или аналога) линукс на десктопе неюзабелен (если вы пользуетесь (неконсольными) браузерами).
Начал развитие аналогичный проект - https://github.com/hakavlad/nohangSome features
- convenient configuration with a well commented config file (there are 38 parameters in the config)
- SIGKILL and SIGTERM as signals that can be sent to the victim
- zram support (mem_used_total as a trigger)
- customizable intensity of monitoring
- desktop notifications: results of preventings OOM and low memory warnings
- black, white, prefer, avoid lists via regex
- possibility of restarting processes via command like systemctl restart something if the process is selected as a victim
Чтобы люди не тратили время зря, напишу тут: он на питоне.
костыли!
Напротив, долгожданное и изящное решение проблемы! OOM killer убивает OOM, earlyoom предотвращает OOM!
ну быть может, быть может...
Бобёр, выдыхай!
понравился коммент про бобра) Месье говорит глупость - они делают ровно одно и тоже, но если православный oom killer киляет прожорливый процесс, когда какое-то приложение просит больше памяти, чем есть в системе (принцип хука), то данное поделие работает по таймеру и если какое либо приложение сьест всю память в промежутке между проверками, то беда. Заключение - не нужен.
Ключевое - слово если.
На практике всё отлично работает.
Раз в году и палка стреляет. А ключевое тут, то что концепт сабжа слегка хромает... А если брать практику, то систему нужно конфигурировать так что б памяти всегда хватало.
Костыли - это хорошо, потому что позволяют инвалидам ходить. Без костылей пришлось бы лежать.
Зачем earlyoom, если можно докупить оперативочки? Не, ну реально. 1 планка оперативки стоит как 3 раза поесть в норм кафешке. Поголодаете денек, зато сможете больше всякого поназапускать.
У меня в ноутбук больше 8ГБ не помещается, например.
Рекомендую в таком случае держать пост 1 месяц. Это даже полезно.
Рекомендую сменить профессию торгаша в компьютерном магазине. Это более полезно.
Ноутбуки не предназначены для тяжелых приложений, например. Зачем ими пользуешься?
а где мне браузер тогда запускать?
ВНЕЗАПНО - на самом обыкновенном компьютере. Он еще апгрейду поддается, прикинь! Чудеса инженерии, да и только.
На мой компьютер память уже не продают
вот такие всегда отмазки. А неужели нельзя сделать по-человечески?
> Зачем earlyoom, если можно докупить оперативочки? Не, ну реально. 1 планка оперативки
> стоит как 3 раза поесть в норм кафешке. Поголодаете денек, зато
> сможете больше всякого поназапускать.В смысле -- еще два (или даже три!) приложения на электроне?
Очень заманчиво, да.
Мы не едим в "нормальной" кафешке. Мы одним здоровым нормальным питанием (картошка жареная + сосиски жареные / котлеты жареные + огурцы свежие + помидоры свежие + огурцы солёные + перец болгарский), и так - каждый день, мне - норм, это моя любимая еда) питаемся, на которое хватает наших мизерных зарплат.
> Мы одним здоровым нормальным питанием
> жареная
> жареные
> жареныеЗдоровым питанием, да. Видимо огурчики свежие и соленые в вашем понимании нивелируют вред всего остального жареного.
> 1 планка оперативки стоит как 3 раза поесть в норм кафешке.Наесться от пуза в китайском ресторане до $20. Перекусить в кафешке до $5. Плашка памяти на 8 гиг от $100.
Либо вы зажрались, либо несколько лет провели в криокамере и пропустили взлет цен на память.
> Перекусить в кафешке до $5Это какая-то совсем нищая. У меня обычно от $5 получается.
>Наесться от пуза в китайском ресторане до $20.Рассказал знакомой, любительнице китайщины - поржали вместе.
>Перекусить в кафешке до $5.
Это где такие кафешки? Или в твоем понимании "перекусить" - это чашка растворимого кофе и пара гамбургеров, в которые не пойми какого овна напихано?
>Плашка памяти на 8 гиг от $100.
Все, что не Corsair и HyperX, то не память, да?
Резюме - школиём и троллем за версту прет от тебя, бро.
>>Наесться от пуза в китайском ресторане до $20.
> Рассказал знакомой, любительнице китайщины - поржали вместе.Насчет китайщины не знаю, но азиатщина "от пуза" в той же монге, где готовят прямо при тебе и из тобой же отобранных продуктов, как раз в 20€ укладывается.
Но это конечно не вас нае*ывают, это на самом деле монга https://www.mongos.de/en/restaurant/koeln.php такой вот вариант макдака, ага ))> Это где такие кафешки? Или в твоем понимании "перекусить" - это чашка растворимого кофе и пара гамбургеров, в которые не пойми какого овна напихано?
Это там, где (на самом деле) жизни нет. Правильно делаете, что не верите байкам!
> Рассказал знакомой, любительнице китайщины - поржали вместе.
> Это где такие кафешки?Ну вот моем родном городе мясное блюдо на ~300гр стоит в китайском ресторане $4-$6, пицца в кафешке $3, шаурма меньше $2, шашлык $3. Уверен, нешколиё найдет где поесть за в десять раз большую стоимость. Ведь ему главное не хорошо поесть, а попонтоваться тем, в какую дорогую кафешку/ресторан оно ходит.
> Все, что не Corsair и HyperX, то не память, да?
Ок, взял самую дешевую https://hard.rozetka.com.ua/silicon_power_sp008gbsfu213b02/p.../ получилось аж на целых 5$ дешевле $100. В местных магазинах будет как раз от $100.
анонимы уже предлагали сбегать в ближайший магазин за оперативой?:)
Постом выше как раз предлагает вместо еды купить оперативки...
> поддерживает отправку уведомлений о принудительно завершённых процессах на рабочий столКак-то дальше и добавлять уже ничего не нужно, все с этой поделкой понятно.До кучи еще нужно было написать это на петоне, чтоп уже совсем уничтожить даже последний намек на здравый смысл))
>все с этой поделкой понятноЧто понятно? Что плохого в ВОЗМОЖНОСТИ десктопных уведомлений?
>До кучи еще нужно было написать это на петоне
https://github.com/hakavlad/nohang
Nohang is a highly configurable daemon for Linux which is able to correctly prevent out of memory conditions.
Done!
> Что плохого в ВОЗМОЖНОСТИ десктопных уведомлений?Понимаешь в чем фишка, какова НЕОБХОДИМОСТЬ возможности десктопных уведомлений?
Если это демон, то он должен писать в лог, молча. Если это не демон, то все становится значительно смешнее.ТруЪ по ссылкам не ходят, извини.
Свобода лучше, чем несвобода. Возможность лучше, чем невозможность. Ну так-то в жизни вообще ни в чем нет необходимость. Какова необходимость ВОЗМОЖНОСТИ жизни?
А я не философ, бро))
Вечно всяким труъ все не нравится. Ро существу же от того, что тул может отправить сообщение не толтко в стдаут, а ещк в notify-send - никому хуже не становится. Тут вам не системд, который не только может все, но и заставляет это своё "все" использовать
systemd-hangd?
No, no hangd!
https://en.wikipedia.org/wiki/Hang_(computing)
нужная штука на самом деле, ибо с выключенными оверкомитами - иногда жаба не запускается
Все что я хочу сказать тем у кого линукс зависает намертво из-за переполнения памяти. СМЕНИТЕ ДИСТРИБУТИВ НА ЧТО-ТО НЕ ТАКОЕ КАЛИЧНОЕ.
> Все что я хочу сказать тем у кого линукс зависает намертво из-за
> переполнения памяти. СМЕНИТЕ ДИСТРИБУТИВ НА ЧТО-ТО НЕ ТАКОЕ КАЛИЧНОЕ.У тебя ведь 32 гига памяти, да? Или 64? Или 128? Ну какой же ты молодец — решил проблему!
>> СМЕНИТЕ ДИСТРИБУТИВ НА ЧТО-ТО НЕ ТАКОЕ КАЛИЧНОЕ.
> У тебя ведь 32 гига памяти, да?Ну 32, но дело не в этом. Впрочем, Вы же сами по сути дали такой же совет в #102, не? :)
8. но поддержу шигорина.
На что сменить RHEL?
на убунту вестимо
Всё зависит от того, как настроить менеджер памяти. В линуксе по умолчанию менеджер настроен на оптимальную работу фоновых служб (сервера́), в винде же по умолчанию стоит настройка на работу пользовательских приложений.
Показывай кейс как настроить под декстоп апы, если такой умный.
:)
да поставьте уж себе irqbalance наконецто!!!!1# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 9 0 0 0 0 0 0 0 IO-APIC 2-edge timer
1: 0 0 0 0 0 0 119259 0 IO-APIC 1-edge i8042
8: 0 0 0 0 0 0 0 44 IO-APIC 8-edge rtc0
9: 650806 401 0 0 0 0 0 0 IO-APIC 9-fasteoi acpi
12: 0 0 0 0 0 181370 0 0 IO-APIC 12-edge i8042
16: 0 31 0 0 0 0 10 0 IO-APIC 16-fasteoi ehci_hcd:usb1
18: 1 0 0 0 0 0 0 0 IO-APIC 18-fasteoi i801_smbus
23: 0 0 35 0 0 12 0 0 IO-APIC 23-fasteoi ehci_hcd:usb2
24: 0 0 97 0 0 978691 0 0 PCI-MSI 32768-edge i915
25: 0 0 0 14 0 0 0 230074 PCI-MSI 524288-edge nvkm
26: 0 0 0 0 10040 0 7359851 0 PCI-MSI 512000-edge ahci[0000:00:1f.2]
27: 874592 0 0 86 0 0 0 0 PCI-MSI 327680-edge xhci_hcd
28: 0 0 0 0 34 0 0 6539651 PCI-MSI 1572864-edge iwlwifi
29: 0 0 0 0 0 275803982 0 0 PCI-MSI 409600-edge eth0
30: 0 0 0 0 0 0 898855 0 PCI-MSI 442368-edge snd_hda_intel:card0
31: 0 0 0 0 0 0 0 117 PCI-MSI 49152-edge snd_hda_intel:card1
NMI: 0 0 0 0 0 0 0 0 Non-maskable interrupts
LOC: 37568451 7459776 9938194 7600149 9953066 6502186 9669913 7487354 Local timer interrupts
SPU: 0 0 0 0 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 0 0 0 0 Performance monitoring interrupts
IWI: 9049601 9001318 11483731 8813827 11340145 11592037 11375181 8584509 IRQ work interrupts
RTR: 6 0 0 0 0 2 0 2 APIC ICR read retries
RES: 13555675 11439852 11860938 10220162 11011909 10382012 10961155 9711947 Rescheduling interrupts
CAL: 423857 9746756 10473751 9715232 10566874 14189988 10424151 9789938 Function call interrupts
TLB: 237504 198485 244023 199139 239101 223689 243022 234353 TLB shootdowns
TRM: 7965674 7965674 7965674 7965674 7965674 7965674 7965674 7965674 Thermal event interrupts
THR: 0 0 0 0 0 0 0 0 Threshold APIC interrupts
MCE: 0 0 0 0 0 0 0 0 Machine check exceptions
MCP: 370 358 358 358 358 371 371 371 Machine check polls
ERR: 0
MIS: 0
PIN: 0 0 0 0 0 0 0 0 Posted-interrupt notification event
NPI: 0 0 0 0 0 0 0 0 Nested posted-interrupt event
PIW: 0 0 0 0 0 0 0 0 Posted-interrupt wakeup eventи сравните со своим
ps
это haswell, прочие-остальные в 80% случаев сами так не могут. нужно помочь.
В целом zram на 50% ОЗУ решил проблему подвисаний в нашем офисе. Опыт описан здесь: https://habr.com/post/344836/
На всех системниках и мониторах наклеены инструкции, как делать alt+sysrq+f, но они и так были почти не нужны, а потом ОЗУ стало 8 ГБ.
> В целом zram на 50% ОЗУ решил проблему подвисаний в нашем офисе.
> Опыт описан здесь: https://habr.com/post/344836/
> На всех системниках и мониторах наклеены инструкции, как делать alt+sysrq+f, но они
> и так были почти не нужны, а потом ОЗУ стало 8
> ГБ.
> Представьте, что у вас всего 4 ГБ оперативной памяти…
>> Представьте, что у вас всего 4 ГБ оперативной памяти…
> https://lleo.me/dnevnik/2008/05/31.html"Просидел неделю с настройками, плюнул, снова поставил ALT и надолго потерял желание экспериментировать"
Ну да, --as-needed у нас уже тогда был по умолчанию. И не только.
Можно поподробнее, какие настройки , связанные с оперативной памятью, в Альте?
>а потом ОЗУ стало 8 ГБ.Вот с этого надо было начинать.
Бастьен Ноcера (Bastien Nocera), разработчик Totem, Rhythmbox и gvfs, входящий в управляющий комитет GNOME Foundation, опубликовал список пожеланий, отражающий возможности, которые разработчикам GNOME хотелось бы видеть в ядре Linux.
...Обработчик ситуации исчерпания памяти в системе (OOM killer), работающий в пространстве пользователя;
https://www.opennet.ru/opennews/art.shtml?num=40892Передайте Бастьену Ноcере, что его пожелание выполнено.
При нехватке памяти процесс атоматом закупает её на Amazon/Ebay :)
Так и не понял чем же он лучше стандартного OOM Killer. Кто-то может прояснить?
1. OOMK может долго не приходить, и система зависает
2. OOMK может реагировать избыточно, убивая множество процессов вместо одного виновника. Так запросто может быть убит Xorg впридачу к виновнику.
3. OOMK не посылает десктопных уведомлений.
4. OOMK не поддерживает удобное управления предпочтительными для убийства процессами через regex matching
5. OOMK отправляет только SIGKILL. Nohang может отправлять SIGTERM, позволяя процессам завершаться корректно.
1) oomk - придет вовремя в отличие от earlyoom (принцип хука на событие вместо таймера как у данного сабжа)
2) oomk, как правило, «убивает» наименее важный по его мнению процесс который вместе с дочерними процессами кушает больше всего памяти. Если убило Xorg значит он был достаточно прожорлив, при этом вы можете восстановить работоспособность системы из консоли (с точки зрения системы он не является критическим сервисом). Вот неплохо написано про алгоритм работы oomk - http://shtsh.blogspot.com/2012/04/oom-killer.html
3) Это особенно актуально если под раздачу попал DE и не сможет вывести нотификацию. Про серверные системы вообще промолчу.
4) oom_score_adj к которому regex matching можно использовать достаточно просто при желании
5) oomk отправляет SIGKILL когда выбор стоит между «упадет система» и «убить» процесс. с SIGTERM можно опоздать с мерами и придется ребутать на гарячуюю всю систему что существенно хуже.
Долго объяснять, просто посмотри на комментарии счастливых пользователей OOM killera:
https://pastebin.com/3THbZyCn
По ссылке перепись "счастливых" *опоруков. Таких найти не проблема практически для любого вопроса.
По хорошему, системы нужно конфигурировать так что б память не заканчивалась после каждого чиха и на настроенных системах в случае форс мажора oomk отрабатывает более чем адекватно.
Да и уязвимостей в нем за всю его историю особо не припомню, не то что в данном сабже...
> и на настроенных системах в случае форс мажора oomk отрабатывает более чем адекватноНу ты и фантазер
Это личный опыт...
Первая мысль при чтении новости - в лучших традициях последнего времени написано на Java или Python, а то и на JavaScript. И по приоритетам киляет сначала само себя. Ан нет, пронесло. Все грамотно.
(на мелодию рекламы пепси) Поколение смузихлебов выбираееееееет ... гoвно.314 лайков, 35 форков вот у этого:
<code>
report_interval = report_interval * 10; // loop runs at 10Hz
...
usleep(100000); // 100 ms <=> 10 Hz...
char notif[600];
snprintf(notif, sizeof(notif), "%s %s", notif_command, notif_args);
...
char notif_args[PATH_MAX + 1000];
snprintf(notif_args, sizeof(notif_args), "-i dialog-warning 'earlyoom' 'Killing process %d %s'", victim_pid, victim_name);
<code>Ну и коммиты, конечно, просто блистают:
<diff>if (victim_pid == 0) {
- fprintf(stderr, "Error: Could not find a process to kill. Sleeping 10 seconds.\n");
- maybe_notify(notif_command, "-i dialog-error 'earlyoom' 'Error: Could not find a process to kill'");
- sleep(10);
+ fprintf(stderr, "Error: Could not find a process to kill. Sleeping 1 second.\n");
+ maybe_notify(notif_command, "-i dialog-error 'earlyoom' 'Error: Could not find a process to kill. Sleeping 1 second.'");
+ sleep(1);
return;
}
@@ -223,9 +223,9 @@ static void userspace_kill(DIR* procdir, int sig, int ignore_oom_score_adj,
// Killing the process may have failed because we are not running as root.
// In that case, trying again in 100ms will just yield the same error.
// Throttle ourselves to not spam the log.
- fprintf(stderr, "Sleeping 10 seconds\n");
- maybe_notify(notif_command, "-i dialog-error 'earlyoom' 'Error: Failed to kill process'");
- sleep(10);
+ fprintf(stderr, "Sleeping 1 second\n");
+ maybe_notify(notif_command, "-i dialog-error 'earlyoom' 'Error: Failed to kill process. Sleeping 1 second.'");
+ sleep(1);
}
<diff>Наxера святые Керниган и Ричи дали обезьянам дефайны и статики, а пророк их Страуструп консты - непонятно.
Юзеры лайкают за полезный функционал, а не за качество кода.
Только в первые 10 минут.
а потом приходит ООMKiller...
Полезный функционал напрямую зависит от качества кода.
Можно и на костылях сделать полезный функционал. А можно сделать красивый вылидный код, которых ничего полезного не делает. Это перпендикулярные вещи в основном.
Чую использование может грозить сильными потоками матов. Скажем у вас браузер, возможно рыжий, сожрал дофига памяти, и вот вы в процессе оплаты чего либо и тут рраз...
А дальше как повезет, возможно придется много звонить и объяснять что "упс".
Напротив, если не использовать предотвратитель ООМ, то система тависнет так, что потребуются жесткие меры с потерей несохраненных данных всех приложений. Опять таки, можно настроить earlyoom на реакцию только в крайнем случае, например если свододной памяти меньше 1%
И да, nohang поддерживает всплывающие уведомления о низком уровне памяти, предупреждая пользователя о необходимости умерить аппетит. См демо https://youtu.be/DefJBaKD7C8
Т.е. если памяти станет совсем мало, весь экран покроется пятнами с непонятными надписями? круто
Покроется если влючешь эту опцию. По дефолту ГУИ уведомления отключены.
А какже OOMKILLER??
1) oomk - придет вовремя в отличие от earlyoom (принцип хука на событие вместо таймера как у данного сабжа)
2) oomk, как правило, «убивает» наименее важный по его мнению процесс который вместе с дочерними процессами кушает больше всего памяти. Если убило Xorg значит он был достаточно прожорлив, при этом вы можете восстановить работоспособность системы из консоли (с точки зрения системы он не является критическим сервисом). Вот неплохо написано про алгоритм работы oomk - http://shtsh.blogspot.com/2012/04/oom-killer.html
3) Это особенно актуально если под раздачу попал DE и не сможет вывести нотификацию. Про серверные системы вообще промолчу.
4) oom_score_adj к которому regex matching можно использовать достаточно просто при желании
5) oomk отправляет SIGKILL когда выбор стоит между «упадет система» и «убить» процесс. с SIGTERM можно опоздать с мерами и придется ребутать на гарячуюю всю систему что существенно хуже.
фу блин, наоборот1. OOMK может долго не приходить, и система зависает
2. OOMK может реагировать избыточно, убивая множество процессов вместо одного виновника. Так запросто может быть убит Xorg впридачу к виновнику.
3. OOMK не посылает десктопных уведомлений.
4. OOMK не поддерживает удобное управления предпочтительными для убийства процессами через regex matching
5. OOMK отправляет только SIGKILL. Nohang может отправлять SIGTERM, позволяя процессам завершаться корректно.