Как стать автором
Обновить

Комментарии 12

Автор оригинала как будто устал писать к концу статьи, есть ощущение, что остановился на самом интересном месте :)

Из книжки в книжку и из статьи в статью эту хрень бездумно переписывают :(

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

А если диска нет (тонкий клиент, например), или свопинг вообще отключен, то что тогда с виртуальной памятью происходит? Она ведь как-то всё равно продолжает работать?

Корректное замечание, спасибо!

Очень схематично для себя вижу картину следующим образом: виртуальная память является абстракцией для безопасности, упрощения и оптимизации работы с физической памятью. Пример оптимизации автор приводит в статье (переиспользование физической памяти несколькими процессами). Таким образом, приложения прекрасно работают с виртуальной памятью и в случае отключенного swap с той лишь разницей, что страницы никуда не будут выгружаться.

Буду рад конструктивным уточнениям и дополнениям

Ну тут можно ещё про overcommit (который вы затронули) и oom-killer поговорить.

Вы как-то вообще упустили такую штуку как отображение файлов в память. А ведь это именно то что позволяет очень эффективно работать с содержимым файлов в любой современной OS. Например, исполняемые файлы не читаются с диска в память процесса. Они туда просто отображаются. А читаются они в тот самый страничный кеш. Точно этот же механизм используются для работы со свопом, кстати.

Доводилось сталкиваться с overcommit'ом памяти.

По-умолчанию vm.overcommit_ratio равно 50, т.е. процессы не смогут занять (именно реально физически занять) больше 50% памяти.

Случалось что oom killer прибивал процессы когда памяти еще была половина свободна.

Установка vm.overcommit_ratio=100 в /etc/sysctl.conf решает проблему.

Но конечно слепо повторять не стоит, надо четко понимать свой сценарий использования. Кому-то возможно и 300% задать, а кому-то нужно наоборот полностью отключать эту фичу, чтоб использовать можно было ровно столько сколько есть, безо всякого "оверселлинга"... Типа как на vps продают клиентам больше ядер, чем физически есть на сервере с расчетом на то что всем сразу все их ядра не понадобятся. Или как банки схлопываются если вдруг много клиентов резко решат забрать свои деньги (которых уже столько нету).

Да, тут либо агрессивная стратегия с расчетом на то, что память всем процессам не понадобится разом, либо осторожная с полным обеспечением виртуальной памяти физической :)

В линуксе так же память работает? когда у тебя свободно 30 гб ФИЗИЧЕСКОЙ памяти, но при допустим открытие новой вкладки в хроме пишет Аут оф мемори?

Какая разрядность браузера?

У меня был один баг в Хроме (я его репортил, его починили), там один из девтулзов валил вкладку из-за нехватки памяти. И не смотря на то, что у меня было 64-бит и памяти огогого, вкладка падала.

Так вот, инженер Гугла сказал, что моя вкладка превышала 4 Гб, и потому она убивалась. Поэтому, может быть это ваш случай.

64 ласт. Я даже не знаю существует ли сейчас 32 )

О, класс. Это как раз история про то, что у Windows нет оверкоммита =)

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

Если обратите внимание, у вас чуть ниже есть графа "Выделено". Так вот, Винда ограничивает память именно по количеству выделенной, а не реально используемой. Оверкоммит в Линуксе решает именно эту проблему. И на ту же максимальную границу графы "Выделенно" влияет файл подкачки. В Винде может быть такая ситуация, что у вас настроен файл подкачки, который никогда не используется, потому что он является просто "резервом" на тот случай, если таки кто-то кто выделил громадные объёмы памяти "внезапно" начнёт её использовать. Проблема лишь в том, что обычно эти самые неиспользуемые области памяти так и останутся навсегда неиспользуемыми... И Винда хранит эту память свободной "на всякий случай".

Что это за изложение третьеклассника?

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

Разумеется, идея виртуальной памяти совершенно не в этом.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории