28 марта 2024, 15:37

Цитата дня:

Если вы не можете объяснить что-либо простыми словами, вы это не понимаете. Ричард Фейнман


Неправильное отображение занятой оперативной памяти в гостевой ОС

Автор Kilian, 27 февраля 2021, 12:58

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

Вниз

Kilian

Здравствуйте. Столкнулся вот с такой странной ситуацией. Есть хостовый сервак Hyper-V, на котором крутятся виртуальные машины. И вот недавно заметил странное их поведение по поводу занятой оперативной память. На всех виртуалках выставлено динамическое использование оперативной памяти. Странность в том, что различается ее выделенное количество указанное в хостовой машине и в самой виртуалке. Когда нагрузка на виртуальную машину падает, то хостовая показывает, что память освобождается, а операционная система виртуальной машины так и пишет максимум и причем она занята на 80%, хотя нагрузка минимальная. Может кто встречался с таким? Заранее спасибо за помощь.

Уваров А.С.

Виртуальные машины определяют память "неправильно", так как оперируют доступной памятью именно внутри VM, гипервизор показывает реально выделенную память. "Лишняя" память, которую видит VM, может быть сброшена в своп, закеширована, являться разделяемой (общие загруженные компоненты и библиотеки нескольких виртуалок) и т.д. и т.п.

Kilian

Виртуальные машины определяют память "неправильно", так как оперируют доступной памятью именно внутри VM, гипервизор показывает реально выделенную память. "Лишняя" память, которую видит VM, может быть сброшена в своп, закеширована, являться разделяемой (общие загруженные компоненты и библиотеки нескольких виртуалок) и т.д. и т.п.
А как тогда понять хватает ей памяти или нет? Если она даже в состоянии простоя показывает загрузку на 80 - 90%?

ival

Так в этом и смысл dm, отнимать все что не нужно. Абстракция помогает мнимо увеличить производительность. Если вы когда нибудь зрительно наблюдали загрузку озу на 80% на реальном железе и в виртуальной среде, то скорее всего видели, что вм работает с такой же скоростью как и при загрузке в 30%, а вот физика при 80% уже увеличивает время отклика которое заметно не вооруженным глазом. Поэтому вашим машинам хватает памяти при 80% загрузки и больше им не выделяется.

Уваров А.С.

Скажу больше, при включенной динамической памяти виртуалки будут почти всегда работать с 80% загрузкой ОЗУ или близкой к ней. Если виртуалке понадобится больше - ей выдадут. А если нет, то зачем держать выделенной свободную память?

С контейнерами бывает еще веселее, когда внутри контейнер считает, что у него занято пару гигов памяти, а гипервизор говорит, что там только 500 МБ выделено. Потому что в этом и смысл контейнера - максимально использовать общие ресурсы, например, то же ядро и стандартные библиотеки.

Вверх