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

Высокое использование памяти в Windows 2008 R2

Проблема, с которой я столкнулся, довольно проста: хотя память, используемая приложениями, довольно мала (~ 2 ГБ), в то же время диспетчер задач сообщает, что на сервере практически вся используемая память (16 ГБ). Во время этого он начинает менять местами, производительность идет через пол, а задержка зашкаливает.

Я диагностировал это с помощью приложения, которое открывает множество файлов, используя доступ к отображаемой памяти (возможно, каким-то не совсем стандартным способом, как это написано в Delphi). RamMap от Sysinternals сообщает, что эти 14 ГБ используются для «сопоставленного файла» в активном состоянии. Дело в том, что это воспоминание не активно используются, эти приложения находятся в режиме ожидания без подключенных клиентов. Как можно более праздно.

Чтобы вернуть использование памяти к нормальному уровню, мне просто нужно использовать опцию «Пустой → Пустой рабочий набор системы» в RamMap. Это решает проблему отсутствия свободной памяти до тех пор, пока нет новых действий (чтение из файлов данных и т. Д.). Затем использование памяти увеличивается, а производительность снова падает.

Решением было бы написать сценарий, который будет делать то же самое, что и RamMap каждые несколько минут. Вот где я застрял. я нашел EmptyWorkingSet WinAPI и обнаружил сценарий PowerShell для его запуска во всех процессах в системе, но он действительно уменьшает используемую память максимум на 200-300 МБ, а RamMap на это не способен.

Как регулярно запускать опцию RamMap Empty System Working Set?

Проблема была вызвана приложением, использующим FILE_FLAG_RANDOM_ACCESS. Исправил приложение.

Если кто-то опубликует общий обходной путь, я назначу ему правильный ответ.