Вопрос или проблема
Я знаю, что значит “committed”, просто не понимаю, куда это все девается.
Скачайте Process Explorer от Microsoft, затем включите все столбцы.
Я обнаружил процесс под названием runSW.exe, который показывает 22GiB Shared Commit, после простого поиска в Google появился похожий отчет.
После завершения процесса и отключения службы RunSwUSB все стало нормально.
Теперь проблема решена, но я все еще недоволен, что она так хорошо скрывалась под Shared Commit, и нет хорошей документации, описывающей, какой системный вызов в программировании (предпочтительно на C) приводит к этой скрытой проблеме. Надеюсь, кто-то дополнит этот ответ, добавив эту информацию.
Ответ или решение
Вопрос, обсуждаемый в вашем описании, связан с разницей между значениями "размер выделенной памяти" (Commit Size) на вкладке "Детали" (Details) и "выделенная память" (Committed) на вкладке "Производительность" (Performance) в диспетчере задач Windows 10.
Теория
Во-первых, важно понимать, что такое "выделенная память" (Committed Memory). Это память, которую операционная система гарантирует процессам для их выполнения. Она включает две составляющие: физическую память и файл подкачки на диске. Объем выделенной памяти всегда включает всю физическую и виртуальную память, которая может понадобиться процессам в течение их работы.
Стоит отметить, что отображаемые показатели "размер выделенной памяти" для отдельных процессов и общий объем выделенной памяти могут не совпадать. Это связано с тем, что эти показатели имеют различные компоненты и некоторые используют общее системное пространство памяти — в том числе из-за разделяемой памяти (Shared Memory).
Пример
Как вы упомянули, использование утилиты Process Explorer позволило выявить, что процесс runSW.exe
занимал 22 ГБ общей выделенной памяти. Выяснилось, что данный процесс имел необычно высокий объем разделяемой памяти, что и создавало несоответствие между суммарными значениями по процессам и общим выделенным объемом.
Применение
Ключ к решению подобных проблем — использовать специализированные инструменты для диагностики. Process Explorer является мощным инструментом, который позволяет точно выявлять процессы, занимающие аномально много памяти, но невидимые в стандартном диспетчере задач. Касательно программирования, одним из Windows API, которые могут приводить к подобной ситуации является VirtualAllocEx с совместным использованием строковой памяти между процессами, возможно, с опцией MEM_RESERVE
.
Чтобы избежать подобных скрытых утечек памяти, рекомендуется:
- Регулярно мониторить использование памяти процессов в системе с помощью утилит типа Process Explorer.
- Изучить недокументированные особенности системных вызовов, которые могут использоваться приложениями для работы с памятью.
- Применять структурные проверки и тестирование, чтобы предотвратить неэффективное использование ресурсов памяти приложениями.
Таким образом, глубокое понимание работы системной памяти и использование инструментов для мониторинга позволяют эффективно управлять и устранять проблемы с памятью в операционной системе.