Вопрос или проблема
Один из наших серверов на Windows сообщил о 100% использовании памяти, пожалуйста, смотрите прикрепленное изображение для деталей.
Что я не понимаю, так это то, что “Используется (31.5Г)” больше, чем “Коммитный заряд (6.6Г)”, значит ли это, что что-то не так, или это связано с тем, что часть используемой памяти не подлежит страничной замене?
“Коммитный заряд” — это сумма виртуального адресного пространства, выделенного отдельно для всех процессов, плюс некоторые системные аллокации, такие как непейджируемый пул. Системный предел коммитного заряда определяется суммой ОЗУ и пространства подкачки; однако данный “коммитный заряд” не обязательно означает, что все это пространство фактически используется, как в ОЗУ, так и в файле подкачки. Таким образом, “коммитный заряд” может значительно превышать фактическую оперативную память, которую он использует (даже если у вас нет файла подкачки).
Но есть множество других вещей, которые используют оперативную память. “Используется” — это общая сумма использования памяти всеми процессами (из которых подмножество в памяти каждого процесса является только частью; большая часть остатка обычно представляет собой сопоставления файлов), плюс все системные объемы использования.
Поэтому вовсе не удивительно, что коммитный заряд значительно меньше “используемой” ОЗУ. Это не обязательно должно быть так. Кроме того, также возможно, что коммитный заряд может быть больше, чем “используемая” ОЗУ (если много выделенной памяти коммитировано, но еще не использовано, то есть не “принято к сведению”, т.е. не отражено в ОЗУ).
Ответ или решение
Вопрос, касающийся высоких показателей использования памяти на сервере Windows 2012 R2, а также разницы между "используемой памятью" и "коммит-зарядом", требует детального объяснения.
Объяснение терминов
-
Используемая память (In use): Это общее количество физической памяти (RAM), которое в настоящее время используется всеми процессами, а также системой. Она включает в себя все активные данные и код, которые находятся в оперативной памяти на данный момент.
-
Коммит-заряд (Commit Charge): Это сумма виртуального адресного пространства, выделенного процессам, и определенных системных выделений, таких как непагинирующий пул (nonpaged pool). Коммит-заряд указывает на максимальное количество памяти, которое все процессы в системе могут использовать, включая данные, которые находятся на диске, и те, что могут быть загружены в память по мере необходимости.
Анализ ситуации
В вашем случае вы заметили, что "используемая память" (31,5 ГБ) превышает "коммит-заряд" (6,6 ГБ). Это действительно может выглядеть несколько странно, но такое поведение не является аномальным. Причины могут быть следующими:
-
Не пагинируемая память (Nonpaged Memory): Часть памяти, используемой системой, может быть непагинируемой, что означает, что она всегда остается в оперативной памяти и не может быть выгружена на диск. Это существенно увеличивает общий объем используемой памяти.
-
Файловые отображения (File Mappings): В дополнение к активным процессам, используемая память может включать часто кэшируемые данные и файловые отображения, которые также могут занимать значительное количество оперативной памяти.
-
Ленивая аллокация (Lazy Allocation): Некоторые процессы могут выделять память, которая еще не была фактически "задействована". Это означает, что их коммит-заряд может быть выше, чем фактически использованная память в данный момент.
Рекомендации по устранению проблемы
-
Мониторинг: Используйте инструменты мониторинга, такие как Performance Monitor (perfmon) или Task Manager, чтобы следить за нагрузкой на память, а также узнать, какие процессы потребляют наибольшее количество ресурсов.
-
Оптимизация процессов: Попробуйте определить и при необходимости оптимизировать или переработать процессы, которые потребляют чрезмерное количество памяти.
-
Проверка на утечки памяти: Убедитесь, что нет проблем с утечками памяти в каких-либо приложениях. Это может быть причиной ненадлежащего использования оперативной памяти.
-
Производительность системы: Если вы сталкиваетесь с повторяющейся проблемой полной загрузки памяти, рассмотрите возможность увеличения объема оперативной памяти на сервере или настройки файла подкачки для улучшения работы системы.
Подводя итог, разница между "используемой памятью" и "коммит-зарядом" в вашей ситуации может быть обоснована различными факторами, включая системные ресурсы и архитектуру работы приложения. Степень загрузки памяти требует внимательного изучения и анализа, и важно следить за всей системой в целом.