Назад | Перейти на главную страницу

Утечка памяти управления процессами в Windows Server x64?

После чистой установки и загрузки ОС Windows x64 я запустил cmd.exe (любой другой exe) и закрыл его. Затем запускаю rammap.exe (http://technet.microsoft.com/en-us/sysinternals/ff700229.aspx). На второй странице под названием «Процессы» я отсортировал список по имени процесса и увидел, что cmd.exe по-прежнему потребляет память (4 КБ частной и 16 КБ таблицы страниц = 20 КБ). Я запустил его второй раз, и в этом списке появляется новый элемент (по одному на каждый запуск + завершение процесса). Таким образом, каждое завершение процесса отнимает 20 КБ памяти.

Если у вас есть программное обеспечение, которое часто запускает и завершает процессы на такой серверной ОС, вы заметите, что через несколько дней или недель ОС начинает показывать странные ошибки (обычно о нехватке памяти). И еще через несколько дней после этого все, что вам нужно сделать, это перезагрузить ОС. После перезапуска он работает нормально почти столько же времени.

Я регистрировал эту проблему на каждом сервере 2008 R2 x64 (+ SP1 и -SP1) и косвенно (rammap не поддерживает) на сервере 2003 x64.

Проблема не наблюдается в Windows 7 x32 (+ SP1 и -SP1).

Скриншот

См. Первый шаг в исследовании этой проблемы Таблица страниц быстрый рост

Может ли кто-нибудь опровергнуть или одобрить мои предположения и наблюдения? Кто-нибудь может сказать, как обойти это поведение? Это ошибка или нет?

Что ж, если вы хотите закрыть все экземпляры «cmd.exe», вы можете использовать команду TASKKILL.

TASKKILL /IM "CMD.EXE" /F

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