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

Странное использование памяти в Windows Server 2008 R2

Я надеюсь, что кто-то может помочь. У нас есть Windows Server 2008 R2 машина с 16 ГБ ОЗУ, которая постоянно чем-то съедает всю доступную память. Ничего в Диспетчер задач или Монитор ресурсов показывает любой процесс, использующий память более 300 МБ ... но использование памяти на сервере составляет 15,7 ГБ.

Единственное, что работает SQL Server 2008 и IIS7.5 (с ASP.Net).

Примечание. Использование ОЗУ после перезагрузки начинается с низкого уровня и постепенно увеличивается. Примерно через неделю мы продолжаем обнаруживать себя в этой ситуации.

Как мне узнать, что пожирает всю нашу память? :(

Это 64-битный сервер - включена ли у вас локальная политика блокировки страниц в памяти? SQL, скорее всего, занимает остальную часть вашей памяти. Если вы посмотрите на счетчики perfmon, вы увидите распределение памяти.

Вот статья, которая подробно объясняет это

Вы также можете просмотреть счетчики в SQL

SELECT
    object_name
   ,Counter_name
   ,cntr_value
   ,ROUND(( cntr_value * 8192.0 ) / 1048576, 0) AS cntr_value_MB
FROM
    sys.dm_os_performance_counters
WHERE
    object_Name LIKE '%Buffer Manager%'
    AND RTRIM(counter_name) IN ( 'Free pages', 'Total pages',
                                 'Database pages' ) 
UNION SELECT
    object_name
   ,Counter_name
   ,cntr_value
   ,ROUND(( cntr_value / 1024 ), 0) AS cntr_value_MB
FROM
    sys.dm_os_performance_counters
WHERE
    counter_name IN ( 'Target Server Memory (KB)',
                      'Total Server Memory (KB)' )

Быстрый тест: перезапустите SQL Server.
Еще один быстрый тест: перезапустите IIS.

Вы точно узнаете, виноват ли один из них, или вам нужно искать в другом месте.

Это может помочь использовать RamMap чтобы увидеть, куда уходит ваша память.

У вас действительно есть проблемы с памятью?

Становится ли когда-нибудь использование памяти выше чем фактическая установленная память, или она просто заполняется и остается там?

Если память просто заполняется, но вы не испытываете никаких проблем, значит, кеш просто выполняет свою работу; память будет автоматически освобождена, если и когда вы фактически нужно это.

Если использование памяти превышает физический предел и сервер останавливается, значит, вы испытываете некоторую утечку памяти и обязательно должны ее отладить.

Несколько интересных статей по теме "кеш":

http://blogs.msdn.com/ntdebugging/archive/2007/11/27/too-much-cache.aspx
http://blogs.msdn.com/ntdebugging/archive/2007/10/10/the-memory-shell-game.aspx
http://blogs.msdn.com/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic-cache-service.aspx

Вы проверили Perfmon (в частности, счетчики SQL), как было предложено кем-то в другая твоя ветка?

Прежде всего, как было сказано ранее, исправьте его и посмотрите, решит ли это проблему.

Во-вторых, если это не сработало, используйте Обозреватель процессов чтобы лучше узнать об использовании памяти. Перейдите в меню «Просмотр», затем выберите «Столбцы», «Память процесса» и отметьте параметры «Байты личного пользования», «Виртуальный размер» и «Размер рабочего набора». Посмотрите, указывает ли это на то, что здесь виноват.

Тогда радикальным подходом будет попытка остановить службы. IIS, например, может быть полной свиньей памяти, если у вас неправильно настроены пулы приложений и веб-сады (их слишком много), так что это кандидат.

Удачи!