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

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

> А разве тролли не лысые?

Местная порода волосатая. Пока не обреют.

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

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

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

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

Тех. уровень дискуссий на лоре просто потрясает. Господа вы бы прежде чем бросаться безграмотными заявлениями задали бы себе вопрос: а пытался ли я хоть немного разобраться в вопросе? Прочитали бы хоть вот этот документ (/usr/src/linux-*/Documentation/vm/overcommit-accounting), там ведь коротко и ясно для пользователей написано все.

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

Может Вас и потрясает уровень дискусси, но даже в ней Вы не смогли разобраться. Куда ж Вам в дебри лезть?

Вот Вам положение над которым стоит подумать.

Если стабильность работы операционной системы зависит от приложений на ней запущенных, то грош цена такой системе. Человек может написать какую угодно программу, но логика работы OS должна быть такой, что в худшем случае программа будет убита, но система останется работать и остальные программы не будут повреждены. Кроме этого система _обязана_ адекватно реагировать на действия пользователя.

То что мы имеем сейчас при определенной ситуации при корректных программах полностью теряется управляемость системой и она переходит в свободный полет. Другого варианта как нажатие ресета в таком случае нету.

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

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

> Но если это работает криво, то это факт

Если вам не нравится overcommit - отключите его, какие проблемы? Можно конечно попенять на проблему в ДНК, если кое-кто /etc/sysctl.conf не осилил. Есть еще ulimit (тоже работающий вполне себе успешно).

Или вы это все "ниасилили"?

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

>Может Вас и потрясает уровень дискусси, но даже в ней Вы не смогли разобраться. Куда ж Вам в дебри лезть?

>Вот Вам положение над которым стоит подумать.

lefsha, ты прикидываешься или вправду всех вокруг считаешь идиотами? Тебе уже несколько раз объяснили - то что тебе нужно - реализовано и работает, просто прочти документацию! Похоже тебе нельзя компьютерами заниматься (и вообще разработкой), иди в менеджеры...

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