LINUX.ORG.RU

Что происходит, когда в системе заканчивается виртуальная память?


0

0

O'ReillyNet опубликовало небольшую статью о поведении ядра Linux в случае исчерпания объема виртуальной памяти и критериях активации OOM-killer'а (Out-Of-Memory killer). Кроме того, рассмотрены механизмы выделения, управления и освобождения памяти в менеджере памяти.

Особое внимание следует обратить на два механизма выделения памяти процессу:

  • brk() sets the end of the process's data segment.
  • mmap() creates a new VMA and passes it to the allocator.

Первый механизм используется при выделении объемов, меньших чем величина M_MMAP_THRESHOLD=128KB (по умолчанию). Что интересно, именно этот механизм ответственен за "утечку" памяти такого популярного браузера FireFox.

Как можно понять из статьи, возможно программное исправление такого поведения.

>>> Статья

★★★★★

Проверено: ivlad ()
Ответ на: комментарий от blaster999

Только, если ТАКОЙ сервер напишет этот ананимус =]

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

> Интересно, а если веб-серверу сделать POST на 10 гигов, он грохнется?

Попробуй :-P

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

Мда, не ставьте дети Oracle XE 10i на линуксы с 512Mb оперативки. Сегфолты валятся буквально сразу, после перезагрузки пришлось переделывать базу rpm-пакетов.

los_nikos ★★★★★
()

Дык вроде жыж ООМ-а в серии 2.6 прикончили, статья является намеком на "а не пора бы обновиться, уважаемые мегатесторы"?

Gharik
()

brk() злой вызов, как то посмотрел почему Konqueror подвисает при открытии многомегабайтных HTML с отчетами (там чистый HTML без картинок и скриптов). strace показывает при подвисании brk() идущие друг за другом с некоторой паузой между ними ...

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

А вот и не прикончили, файлик mm/oom_kill.c в 2.6.19 есть =)

Зачем его убирать, что будет без него? =)

dimaz-z
()
Ответ на: комментарий от los_nikos

> Мда, не ставьте дети Oracle XE 10i на линуксы с 512Mb оперативки. Сегфолты валятся буквально сразу, после перезагрузки пришлось переделывать базу rpm-пакетов.

Чё, такое феерическое дерьмо этот ваш oracle? Да, я что-то слышал про это...

anonymous
()

Попробовал первый пример на 64битной системе -- окончания работы не дождался %))

the_one
()

Очень важная тема поднята в этой статье.

Мне кажется управление памятью поставлено в Linux из рук вон плохо.

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

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

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

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

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

> Надо понимать, что кол-во памяти всегда ограничено. И нужно иметь смелость сказать стоп.

Понимаешь ли... Линукс сейчас ориентируют на чайниковые десктопы. А чайникам это всё не нужно. Даже вредно. Попса :)

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

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

Ы-ы-ы, это пять! Так и представляю, на сервере выскакивает окошечко "Linux has run out of memory. Please select application to close from this list:"

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

>предложить на выбор скинуть какие-то ненужные приложения целиком в swap и остановить их на время

respect

в юзеровских дистрибах должна быть такая возможность.

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

В общем надо...

binr ★★
()

Очень интересное поведение линукса, когда заканчивается 2 гига оперативы. Кратко опишу: начинается переброс памяти на раздел подкачки, да не просто переброс из лишков, а из 2 гигов туда сливается полтора, потом система понимает, что много чего полезного сбросила и начинается обратныый процесс. И такой тупой переброс данных идет минут 10. Это проверено и вижу неоднократно в SUSE 10.1.

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

Неправда.. Ставил в целях тестирование на такие машинки и даже не Oracle XE 10i, а какой-то из Enterprise, 10.2.0.1 чтоли.. Ничего никуда не вываливалось.. Правда тормозило безбожно..

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

вообще тема действительно разочаровывающе актуальная :(
я тут писал приложение на сях для обработки видеопотока и забыл в одном месте память зарелизить. А там же в бесконечном цикле по 4 мб за 0.04 секунды (т.е. 100мб/с) выделялось... в итоге ресет :(

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

2saper:
Подобное наблюдается в bluefish, gedit с файлами, где есть длинные строчки (долго не оканчивающиеся новой строкой) при включенной подсветке синтаксиса. Есть желание strace-нуть?

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

Пока верить не приходится, но програмулина поставилась и даже поработала немного, а потом сегфолты и капец. Я и так освободил под неё раздел и своп расширил до гига, но и этого мало Ж( Кстати особо не тормозила тачку.

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

> Мда, не ставьте дети Oracle XE 10i на линуксы с 512Mb оперативки. Сегфолты валятся буквально сразу, после перезагрузки пришлось переделывать базу rpm-пакетов.

А мужики то незнают =))) Oracle 10i, помоему еще не существует, есть 10g. 10.1 работала на моем ноуте с 256 мегабайтами оперативки из которых большую часть съедала видеокарта + иксовые приложения. 10.2 без проблем ставится и работает на 512МБ, а с напильником и на 256МБ. А Oracle XE ИМХО вообще никому ненужное поделие (ибо на продакшне его все-равно пользовать никто не будет).

> Чё, такое феерическое дерьмо этот ваш oracle? Да, я что-то слышал про это...

Ваш мозг скорее феерическое дерьмо, если вы не в силах спросить у гугла про oracle. А oracle DB + oracle EBS это наш хлеб и соль.

anonymous
()

Что-что.. трындец происходит.

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

> Пока верить не приходится, но програмулина поставилась и даже поработала немного, а потом сегфолты и капец. Я и так освободил под неё раздел и своп расширил до гига, но и этого мало Ж( Кстати особо не тормозила тачку.

Oracle DB очень часто дерется за память с другими кривонаписанными приложениями. Например c Firefox. А дамп файлов не осталось?

anonymous
()

Да млин, проблемы серьезные и заниматься ими никто не хочет...

anonymous
()

По поводу криков анонимусов (и не очень)

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

sysctl -w vm.overcommit_memory = 2

и все станет очень неплохо. Но жабовские приложения могут начать "падать".

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

Спасибо, узнал много нового

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

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

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

>Надо понимать, что кол-во памяти всегда ограничено. И нужно иметь смелость сказать стоп.

Купи какую-нибудь недорогую книгу по ОС и почитай, чем отличается paging от swapping и почему обычно применяется первое, а не второе. А рассуждать о том, что в Linux хорошо и плохо, ты пока не дорос... ;)

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

> В противном случае сегодня мы имеем ситуацию когда при превышении swap
> некоторого значения компьютер только и занимается что перекидыванием
> данных из памяти в swap и обратно, вместо того чтобы честно сказать
Ну так не делай свап таким большим, или вообще отключи.
К тому же есть /proc/sys/vm/swappiness для тюнинга.

> память закончилась и предложить на выбор скинуть какие-то ненужные
> приложения целиком в swap и остановить их на время или предложить
> закрыть приложения которые отбирают больше всего памяти и не являются
Шутишь, да? Список ему, ага.
Этим прогам просто malloc() будет NULL возвращать и всё - сами свалят.

anonymous
()

> The kernel uses the SIGTERM signal to inform the target process that it should stop.

А по-моему все-таки SIGKILL. Если бы ядро слало SIGTERM -- это было бы зашибись, потому что процесс его может обработать, в отличие от.

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

> Этим прогам просто malloc() будет NULL возвращать и всё - сами свалят.

Это сильно зависит от настройки overcommit. Если используется оптимизм, то NULL возвращен не будет, а при попытке заюзать эту память процесс получит SIGKILL.

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

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

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

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

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

> Лимиты -- это все-таки костыль и не всегда хороши. Ими нельзя задать
> процент от доступных на данный момент ресурсов. Только абсолютные
> значения. А это значит, что часть ресурсов не будет использоваться.
Ну задал бы ты в процентах, и что? Всё равно часть бы не использовалась.
На то он и лимит. Тут вся суть именно в том, чтобы не дать никому
заюзать весь свап, а только его часть. Для этого лимит и нужен.

anonymous
()

Статью не читал, но осуждаю. И так понятно, что жаба жрет память, а потом дохнет :))

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

> Очень важная тема поднята в этой статье.
> Мне кажется управление памятью поставлено в Linux из рук вон плохо.

С т.з. вендузятнегов - то да, конечно. Экстрима не хватает.

> Надо понимать, что кол-во памяти всегда ограничено. И нужно иметь смелость сказать стоп.

Дядя, ну ты прям как г-н Горбачев. Не хватает только пятна на лысине.


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

> вообще тема действительно разочаровывающе актуальная :(
> я тут писал приложение на сях для обработки видеопотока и забыл в одном месте память зарелизить. А там же в бесконечном цикле по 4 мб за 0.04 секунды (т.е. 100мб/с) выделялось... в итоге ресет :(

Вот-вот, сначала пишут через одно место, а потом некоторые особо одаренные ананимусы претензии кидают. А прикинь - такой ляп, да на софтине размера Оракела сделать? ;)

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

кстати если хочется поиграться с системой свапинга, то можете посмотреть в сторону /proc/sys/vm/swappiness файла, чем меньше в нем значение, тем менее вероятней что система выгрузит из памяти какие-то страницы в swap.

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

> и все станет очень неплохо. Но жабовские приложения могут начать "падать".

Да все очень классная система VM - по дефолту гавно, с vm.overcommit_memory = 2 - тоже гавно, но в целом одна из лучших.

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

> Да все очень классная система

Я понимаю, запятые и проч. ерунда - не для школьного хАкЕрА.

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

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

> Вот-вот, сначала пишут через одно место, а потом некоторые особо одаренные ананимусы претензии кидают. А прикинь - такой ляп, да на софтине размера Оракела сделать? ;)

Ага а такой классной операционной системе как линупс только и остается что намертво зависнуть в случае кривой юзерской софтины, например в случае форкбомбы.

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

>Ага а такой классной операционной системе как линупс только и остается что намертво зависнуть в случае кривой юзерской софтины, например в случае форкбомбы.

А в венде пробовал форкбомбы запускать (в cygwin скажем)?

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

>Факир был пьян, и фокус не удался :)

Скопируй в хтмлку и открой ее, удастся. :)

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

> ... остается что намертво зависнуть в случае кривой юзерской софтины, например в случае форкбомбы.

man ulimit

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

> Ага а такой классной операционной системе как линупс только и остается что намертво зависнуть в случае кривой юзерской софтины, например в случае форкбомбы.

Не дело vm-подсистемы всякой хернёй заморачиваться - ибо сам Патрег ей велит тихо сидеть, делать своё дело и делать его хорошо. Для упомянутого предохранения есть всеразличнейшие лимиты и MAC-подсистема. А не как в самой распространённой ОС всех времён, где каждая софтина написана по "принципу емакса" - делает что угодно, но только не свою прямую задачу.

"Линупс" же - это только ядро, мой волосатый друг, к выпускному экзамену хоть заучи ;)

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

> "Линупс" же - это только ядро, мой волосатый друг, к выпускному экзамену хоть заучи ;)

Хм... А разве тролли не лысые?

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