Я надеюсь, что кто-то может помочь. У нас есть 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, например, может быть полной свиньей памяти, если у вас неправильно настроены пулы приложений и веб-сады (их слишком много), так что это кандидат.
Удачи!