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 ()

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

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

anonymous ()

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

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

И какой-же сервер позволит делать ТАКОЙ post?

blaster999 ★★ ()

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

что происходит?.. хех ) сервак убиваеца напрочь и ток ребут помагает )

unReal ()

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

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

los_nikos ★★★★★ ()

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

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

Gharik ()

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

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

saper ★★★★ ()

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

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

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

dimaz-z ()

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

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

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

anonymous ()

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

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

the_one ()

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

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

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

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

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

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

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

lefsha ()

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

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

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

anonymous ()

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

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

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

anonymous ()

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

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

respect

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

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

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

binr ★★ ()

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

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

lexius ★★ ()

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

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

MiracleMan ★★★★★ ()

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

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

xhook ()

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

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

Selecter ★★★★ ()

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

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

los_nikos ★★★★★ ()

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

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

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

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

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

anonymous ()

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

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

manokur ★★ ()

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

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

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

anonymous ()

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

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

anonymous ()

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

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

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

sysctl -w vm.overcommit_memory = 2

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

annoynimous ★★★★★ ()

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

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

anonymous ()

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

<script>a=' ';while(1)a+=a</script>

anonymous ()

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

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

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

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

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

anonymous ()

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

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

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

anonymous ()

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

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

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

anonymous ()

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

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

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

anonymous ()

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

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

anonymous ()

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

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

anonymous ()

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

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

anonymous ()

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

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

DIMON ★★★ ()

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

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

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

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

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


Gharik ()

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

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

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

Gharik ()

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

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

anonymous ()

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

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

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

anonymous ()

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

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

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

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

annoynimous ★★★★★ ()

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

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

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

anonymous ()

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

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

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

anonymous ()

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

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

man ulimit

anonymous ()

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

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

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

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

Gharik ()

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

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

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

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