LINUX.ORG.RU

Время убивать

 , , , ,


6

8

Второй раз за месяц расслабил булки и не заметил утечку оперативной памяти. Система наглухо зависла, сожрав все 16 гб (свапа нет). В консоль не пустили. В последнем эпизоде виноват был Picard, который на обработке коллекции Вивальди сходит с ума и может жрать всю память в одно рыло. У меня только один вопрос, почему OOM Killer не сработал и не прибил эту заразу, если размер виртуальной памяти является основным триггером для него? И что нужно сделать, чтобы убивать подобную жирноту автоматом?

День второй. Поставил zram на половину памяти, vm.oom_kill_allocating_task=1, swappiness=100. Пикард на коллекции Бетховена ставит систему раком. Память жмется хорошо, но киллер не приходит.

День третий. Добавил дисковый свап 2 гб на ssd. Повторил эксперимент. Отзывчивость системы была нормальной даже когда кончился zram и начал заполняться ssd swap, но когда и он кончился, системе закономерно пришел песец. То есть опять песец пришел, а киллер не пришел.

★★★★★

Последнее исправление: Lordwind (всего исправлений: 4)

Можно настроить через cgroups приоритеты в работе oomkiller.
Яндекс, например, для этого cgroups использует.

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

Это если знать жирный софт заранее. А вот в моем примере утечка появилась откуда не ждал.

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

Ну, основной триггер для него несколько сложнее: http://catap.ru/blog/2009/05/03/about-memory-oom-killer/

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

На десктопных системах, в принципе, можно пожертвовать стабильностью и установить vm.oom_kill_allocating_task в 1.

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

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

oomkiller периодически работает от балды, убивает не то, что память сожрало, а ssh например.

Поэтому для руления надо юзать cgroups.

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

В том то и фокус, что вообще юзерские процессы не закрывались, ни один. Я 10-30 минут ждал. Киллер походу в отпуске.

С vm.oom_kill_allocating_task=1 будет помирать последний разжиревший или самый жирный?

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

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

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

Это если знать жирный софт заранее. А вот в моем примере утечка появилась откуда не ждал.

А теперь ты знаешь и можешь настроить работу oomkiller'а через cgroups.

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

Подписался. ФФ бывало кушал всю озу + swap, но oom-killer не приходил.

conformist ★★★
()

Написал приложение, аллоцирующее память в бесконечном цикле. Всё зависло нафиг, а убивец так и не пришёл. ЧЯДНТ?

anonymous
()

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

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

предлагаешь юзать своп на hdd?

может у него 16 gb норм озу и не очень быстрый винт

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

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

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

у меня на старом девайсе на бубунте из коробки не дает забивать больше 1500мб из 1750

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

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

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

Вот помнится винда XP на 512Мб и отключённом свопе моментально убивала жрущее приложение и не тормозила

Harald ★★★★★
()

Могу ошибаться, но так и напрашивается вопрос: это СЕО такое? Только вчера был топик с тэгом игры на похожую тематику в заголовке. Фич-риквест: markdown, сам себе модератор - скрытие тем, голосование за комменты, топики без всяких карм please, текстовое представление аватарок, возможность уменьшения аватарок или отключения. Пока хватит для начала.

anonymous
()

И что нужно сделать, чтобы убивать подобную жирноту автоматом?

Семь бед, один ответ - костыль и велосипед. (написать самому) Работать будет, но будет ли устраивать перфекционистов?

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

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

anonymous
()

Вот-вот.
Говно какое-то этот оом-киллер, нихрена не работает.
Но чтобы это нормально работало, я думаю, нужен какой-то демон, который постоянно мониторит потребление памяти и прибивает тот процесс, который резко начинает набирать обороты. В общем сам этот демон будет проц грузить, хотя можно ограничить процессы, которые он будет проверять только пользовательскими процессами, добавить black-white list ну и настраиваемый интервал проверки.
Короче если кто-то напишет будет круто.

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

Просто, своп - эдакая абстракция. Это некая служебная область памяти + некие «триггерные» действия, связанные с помещением\взятием оттуда данных, по которым особым образом работают алгоритмы управления памятью ОС. Полагаю, вместо свопа нужно было бы выделять в памяти кусок, некий неприкосновенный буфер, куда бы стекали данные и он бы вписывался в алгоритм управления памятью. Но отрезание от памяти куска под такой буфер (он сравним с размером памяти) посчитали не целесообразным.

Я так вижу ситуацию, но это мнение не специалиста, конечно.

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

Не думал, что в ядре может быть такой ГОВНОКОДИЩЕ.

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

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

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

anonymous
()

Я же говорил, набежало невменяемых. Настраивать свап они не умеют, как работает аллокация памяти и оом не понимают, zswap\zram - не, не слышали. У Линукса действительно есть проблема, дефолтные настройки свопа компромисные и с уклоном в сервер, в итоге никому не нравятся. В винде дефолт лучше, факт. И вот вместо того, чтобы настроить подсистему под себя, под свои объёмы ОЗУ, стили работы, особенности ввода\вывода своих конкретных компов адепты ненужного свопа ломают стулья и разбрасывают грабли зубьями вверх. Ну и ладушки, Линукс - сложная и гибко настраиваемая система для профессионалов, вы - не они, так наймите уже профи или свалите уже в казуал ОС, где всё прекрасно.

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

Я лично у себя всё настроил, потому что я понимаю и умею. Всё работает как мне надо, утечки убиваются, интерактивность при отожранной памяти не теряется. А вам удачи и хорошего настроения, держитесь там...

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

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

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

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

А теперь вымой свой коммент с фейри и объясни нормально почему нужен свап. Такую категоричную ТЗ я встречаю впервые. В гугле одни рекомендации в духе «быстрее/медленнее работает». А zram я ранее использовал, тоже нарывался на нехватку памяти и OOM Killer так же не работал, поэтому выпилил.

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

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

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

вместо того, чтобы настроить подсистему под себя

BSD по дефолту, например, ssh не убивает при форк-мемори бомбах.

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

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

man swapiness. Это не swap так устроен, это он так умолчально настроен.

Jameson ★★★★★
()

Ядро какое? Пишут, в 4.7 всё сломали и до сих пор как надо не починили.

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

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

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

А теперь вымой свой коммент с фейри и объясни нормально почему нужен свап.

Не буду. Устал объяснять, надоело, не хочу больше ни с кем спорить. Нравится отключать - отключайте, дело ваше.

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

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

Шо, прямо таки каждый день всем и объяснял? А вот я не поленился и поискал твои комменты на ЛОРе по словам swap, свап и своп. Выплыл только этот топик Ubuntu 16.04, x64, 4 гб ОЗУ и коммент а-ля «делаю как дедушка научил»

Читал статью, точно помню, причём с примерами, на английском, и не могу её найти :( Суть в том, что алгоритмы выделения\очистки памяти неявно предполагают наличие и проверяют работоспособность вытеснения. И когда внезапно выясняется что вытеснять невозможно так как тупо некуда возникают странные ошибки и спонтанные вылеты

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

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

Своп это костыль

А ты попробуй скомпилировать из исходников пакет без Свопа. Некоторые пакеты требуют для своей работы Своп. Тот, кто не имеет раздел Своп, может наткнуться на непонятные глюки системы.

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

А вот я не поленился и поискал твои следы на ЛОРе по словам «mac, macbook, mac os, mac os x». Выплыл только этот топик — «Фанатики опенсорса самые упоротые».

исправил

Короче поц слушай мою заповедь: «Не критикуй, да не критикуем будешь».

anonymous
()

Поставил я zram с дефолтным конфигом и vm.oom_kill_allocating_task=1. Запустил обычную кучу говна крутиться на вентиляторе. Второй экземпляр пикарда довел систему до ручки и началось... нет, кровавого месива я к сожалению не увидел, т.к. киллер и в этот раз не пришел, зато память начала перетекать в zram. В результате система в отзывчивости нисколько не потеряла, вкладки браузера и запущенные программы остались на месте.

Формально конечно я рад, ибо последний раз я тыкал в zram палочкой на дебиане года 3 назад и нужного эффекта не добился. Но и вопрос, куда делся киллер, остается открытым.

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

ой как смишно

правильная комбинация для вызова oom-киллера - alt+sysrq+o. но для начала надо разрешить sysrq, записав 1 в /proc/sys/kernel/sysrq:

$ sudo sh -c 'echo 1 > /proc/sys/kernel/sysrq'

проверено и чётко работает вот на этой программе:

#include <stdio.h>
#include <stdlib.h>

#define G 1024L*1024*1024

int main() {
    long s = 12 * G;
    char *p = malloc(s);
    for (long i=0; i<s; i+=4096) p[i] = 0;
    getchar();
}

чтобы запустить программу, надо её сохранить под именем program.c и в консоли надо написать: gcc program.c -o program && ./program - и она сожрёт 12 гигабайт памяти, а это ой как не понравится oom-киллеру и он её прихлопнет, если нажать вышеуказанную коминацию.

если нет кнопки sysrq, то надо вместо неё нажимать print screen.

а alt+sysrq+f вызывает force reboot, так что проверяйте что делаете, чтобы не напороться на злые шутки анона. у кого больше четырёх звёзд также могут попробовать alt+sysrq+c :) (system crash)

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

Вы создаёте на zram loop-device и на нём - своп? Вроде же есть какая-то фича в ядре, чтобы напрямую сжатый своп создавать, не?

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

Да. А та фича наверное zswap, у меня ssd, поэтому неинтересно.

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

Шта? alt+sysrq+o это выключение, а ребут alt+sysrq+b

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

«Своп нужен!», «Своп необходим!», «Без него никуда!». А я тем временем думаю, чего бы удалить с хомяка, чтобы загрузить очередную web страницу. Свободного места на винте 5Mb. Свободной ОЗУ > 5 Gb.

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

А я тем временем думаю, чего бы удалить с хомяка, чтобы загрузить очередную web страницу. Свободного места на винте 5Mb. Свободной ОЗУ > 5 Gb.

Сам виноват, не держи коллекцию порнухи на винте. Лучше отшипни парочку гигов на СВОП.

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