Эта статья посвящена вопросу, на который часто отвечают участники сообщества. Она вдохновлена отличными постами UdoBs ( ) и направлена на предоставление подробного объяснения часто задаваемому вопросу, чтобы его можно было ссылаться на него в будущих обсуждениях. Она будет обновляться по мере необходимости, любые отзывы/предложения приветствуются.
В моей панели мониторинга показано, что большая часть моей оперативной памяти используется, хотя у моих ВМ и контейнеров LXC выделена лишь небольшая ее часть. Это ошибка утечки памяти? Вероятнее всего, нет.
Прежде всего, вам нужно знать, что ProxmoxVE основан на Debian Linux с ядром Ubuntu. Ядра Linux отлично справляются с использованием неиспользуемой памяти для кэша диска. Это хорошо, поскольку это ускоряет работу, но часто беспокоит пользователей, перешедших с другой операционной системы или гипервизора (хотя они тоже делают что-то подобное, их мониторинг просто сообщает об этом по-другому). Фактически, было бы более тревожно, если бы у вас было, скажем, 128 ГБ оперативной памяти, но использовалось бы только 32 ГБ. Неиспользуемая оперативная память в основном пропадает.
Больше информации по этой теме можно найти на
Я использовал `free -m`, чтобы определить размер моего кэша, но в панели мониторинга все равно есть используемая оперативная память, которая не используется ни системой кэша, ни моими ВМ и контейнерами LXC.
Вы используете ZFS? ZFS использует часть памяти хоста для своего адаптивного кэша замены (ARC). Его использование не отображается в выводе `free -m`. Обычно ZFS использует около 50% системной оперативной памяти, но вы можете перенастроить его в `/etc/modprobe.d/zfs.conf`.
Начиная с ProxmoxVE 8.1, этот файл создается во время установки системы и ограничивает использование ARC до 10% установленной физической памяти или максимум 16 ГБ. Ознакомьтесь с , чтобы узнать, как изменить этот лимит или создать файл, если он отсутствует в вашей системе.
Для общего обсуждения кэша страниц Linux по сравнению с ARC ZFS прочтите отличную статью @chrcoluk
Я проверил использование оперативной памяти внутри ВМ, и она на самом деле использует гораздо меньше оперативной памяти, чем я выделил в настройках ВМ. Не должна ли панель мониторинга ProxmoxVE отражать реальные значения? Вопрос в том, какое значение "реальное"? Внутри ВМ используется только часть выделенной ей оперативной памяти, но ВМ в целом все равно использует всю выделенную ей оперативную память, поэтому ее нельзя использовать другим ВМ/контейнерам и т.д.
Чтобы на самом деле настроить использование оперативной памяти ваших ВМ (то есть настроить параметры памяти ваших ВМ так, чтобы у них была именно та оперативная память, которая им нужна, не больше, не меньше), вам потребуется инструмент мониторинга, работающий внутри вашей ВМ.
Теперь для выбора правильного программного обеспечения для этого, вам понадобится отдельный пост. Я не знаю вашего уровня подготовки и сценариев использования. Существуют также разные типы программного обеспечения для мониторинга в зависимости от того, чего вы на самом деле хотите достичь. Для получения дополнительной информации о различных типах прочтите эту статью в блоге от Kristian Koehntopp:
И если вы понимаете немецкий (или используете хороший машинный переводчик), то Marianne Spiller написала отличную статью об основах мониторинга и анализа требований, проектирования и реализации системы мониторинга:
В нашем контексте мы говорим о программном обеспечении, которое Koehntopp называет типом один мониторинговой системы. Она используется для наблюдения за системными параметрами и предупреждения, если что-то пошло не так (например, полный диск), но также может использоваться для наблюдения за использованием оперативной памяти и нагрузкой ЦП/системы. Популярные примеры с открытым исходным кодом для такого типа мониторингового программного обеспечения — Zabbix, Prometheus, Icinga2, Nagios или Checkmk. Но также есть коммерческие предложения (например, PRTG) и менее используемые инструменты с открытым исходным кодом.
Выберите один из них (возможно, после экспериментов с каждым из них в небольшом контейнере LXC или ВМ просто для практики), наблюдайте за использованием оперативной памяти ваших контейнеров и ВМ и настраивайте параметры ВМ в соответствии с вашими потребностями.
Также обратите внимание на для большей дискуссии об использовании оперативной памяти в ProxmoxVE и текущей реализации графиков.
Другие гипервизоры имеют опции, позволяющие динамически выделять неиспользуемую оперативной памяти одного ВМ другим ВМ. Как я могу этого добиться с помощью ProxmoxVE?
В теории есть два варианта динамического управления памятью:
* Дeduplication памяти между различными ВМ Linux с использованием Kernel Samepage Merging (KSM). Для этого необходимо много ВМ с похожими работающими приложениями и ядрами, чтобы это работало. Ознакомьтесь с для получения дополнительной информации.
* ВМ с драйвером ballooning. ВМ могут сбрасывать неиспользуемую память во время работы (ballooning памяти). Этот драйвер уже встроен в современные ядра Linux, а для Windows вам сначала нужно установить драйвер.
В обоих случаях вам нужно активировать эту функцию в настройках ВМ. Ознакомьтесь с для получения дополнительной информации.
Но не ожидайте слишком многого: сначала оперативная память должна быть полностью использована, прежде чем будет предпринята попытка ballooning, и вы никогда не сможете иметь слишком много оперативной памяти.
У меня все еще есть несколько нерешенных вопросов. Не стесняйтесь задавать их здесь или в исходной ветке, где был размещен этот пост.
Если в статье что-то не так / у меня есть предложение что-то добавить, я буду рад любым отзывам, просто отправьте мне личное сообщение или ответьте на эту ветку.
Версия 0.1: Первый пост
Версия 0.2: Исправлены некоторые опечатки, добавлена информация о драйвере ballooning, спасибо @Impact за предложения
Версия 0.3: Добавлена ссылка на статью @chrcoluk об кэше ARC ZFS по сравнению с кэшем страницы Linux.
В моей панели мониторинга показано, что большая часть моей оперативной памяти используется, хотя у моих ВМ и контейнеров LXC выделена лишь небольшая ее часть. Это ошибка утечки памяти? Вероятнее всего, нет.
Прежде всего, вам нужно знать, что ProxmoxVE основан на Debian Linux с ядром Ubuntu. Ядра Linux отлично справляются с использованием неиспользуемой памяти для кэша диска. Это хорошо, поскольку это ускоряет работу, но часто беспокоит пользователей, перешедших с другой операционной системы или гипервизора (хотя они тоже делают что-то подобное, их мониторинг просто сообщает об этом по-другому). Фактически, было бы более тревожно, если бы у вас было, скажем, 128 ГБ оперативной памяти, но использовалось бы только 32 ГБ. Неиспользуемая оперативная память в основном пропадает.
Больше информации по этой теме можно найти на
Я использовал `free -m`, чтобы определить размер моего кэша, но в панели мониторинга все равно есть используемая оперативная память, которая не используется ни системой кэша, ни моими ВМ и контейнерами LXC.
Вы используете ZFS? ZFS использует часть памяти хоста для своего адаптивного кэша замены (ARC). Его использование не отображается в выводе `free -m`. Обычно ZFS использует около 50% системной оперативной памяти, но вы можете перенастроить его в `/etc/modprobe.d/zfs.conf`.
Начиная с ProxmoxVE 8.1, этот файл создается во время установки системы и ограничивает использование ARC до 10% установленной физической памяти или максимум 16 ГБ. Ознакомьтесь с , чтобы узнать, как изменить этот лимит или создать файл, если он отсутствует в вашей системе.
Для общего обсуждения кэша страниц Linux по сравнению с ARC ZFS прочтите отличную статью @chrcoluk
Я проверил использование оперативной памяти внутри ВМ, и она на самом деле использует гораздо меньше оперативной памяти, чем я выделил в настройках ВМ. Не должна ли панель мониторинга ProxmoxVE отражать реальные значения? Вопрос в том, какое значение "реальное"? Внутри ВМ используется только часть выделенной ей оперативной памяти, но ВМ в целом все равно использует всю выделенную ей оперативную память, поэтому ее нельзя использовать другим ВМ/контейнерам и т.д.
Чтобы на самом деле настроить использование оперативной памяти ваших ВМ (то есть настроить параметры памяти ваших ВМ так, чтобы у них была именно та оперативная память, которая им нужна, не больше, не меньше), вам потребуется инструмент мониторинга, работающий внутри вашей ВМ.
Теперь для выбора правильного программного обеспечения для этого, вам понадобится отдельный пост. Я не знаю вашего уровня подготовки и сценариев использования. Существуют также разные типы программного обеспечения для мониторинга в зависимости от того, чего вы на самом деле хотите достичь. Для получения дополнительной информации о различных типах прочтите эту статью в блоге от Kristian Koehntopp:
И если вы понимаете немецкий (или используете хороший машинный переводчик), то Marianne Spiller написала отличную статью об основах мониторинга и анализа требований, проектирования и реализации системы мониторинга:
В нашем контексте мы говорим о программном обеспечении, которое Koehntopp называет типом один мониторинговой системы. Она используется для наблюдения за системными параметрами и предупреждения, если что-то пошло не так (например, полный диск), но также может использоваться для наблюдения за использованием оперативной памяти и нагрузкой ЦП/системы. Популярные примеры с открытым исходным кодом для такого типа мониторингового программного обеспечения — Zabbix, Prometheus, Icinga2, Nagios или Checkmk. Но также есть коммерческие предложения (например, PRTG) и менее используемые инструменты с открытым исходным кодом.
Выберите один из них (возможно, после экспериментов с каждым из них в небольшом контейнере LXC или ВМ просто для практики), наблюдайте за использованием оперативной памяти ваших контейнеров и ВМ и настраивайте параметры ВМ в соответствии с вашими потребностями.
Также обратите внимание на для большей дискуссии об использовании оперативной памяти в ProxmoxVE и текущей реализации графиков.
Другие гипервизоры имеют опции, позволяющие динамически выделять неиспользуемую оперативной памяти одного ВМ другим ВМ. Как я могу этого добиться с помощью ProxmoxVE?
В теории есть два варианта динамического управления памятью:
* Дeduplication памяти между различными ВМ Linux с использованием Kernel Samepage Merging (KSM). Для этого необходимо много ВМ с похожими работающими приложениями и ядрами, чтобы это работало. Ознакомьтесь с для получения дополнительной информации.
* ВМ с драйвером ballooning. ВМ могут сбрасывать неиспользуемую память во время работы (ballooning памяти). Этот драйвер уже встроен в современные ядра Linux, а для Windows вам сначала нужно установить драйвер.
В обоих случаях вам нужно активировать эту функцию в настройках ВМ. Ознакомьтесь с для получения дополнительной информации.
Но не ожидайте слишком многого: сначала оперативная память должна быть полностью использована, прежде чем будет предпринята попытка ballooning, и вы никогда не сможете иметь слишком много оперативной памяти.
У меня все еще есть несколько нерешенных вопросов. Не стесняйтесь задавать их здесь или в исходной ветке, где был размещен этот пост.
Если в статье что-то не так / у меня есть предложение что-то добавить, я буду рад любым отзывам, просто отправьте мне личное сообщение или ответьте на эту ветку.
Версия 0.1: Первый пост
Версия 0.2: Исправлены некоторые опечатки, добавлена информация о драйвере ballooning, спасибо @Impact за предложения
Версия 0.3: Добавлена ссылка на статью @chrcoluk об кэше ARC ZFS по сравнению с кэшем страницы Linux.
