Странное использование памяти в Windows Server 2008 R2
Я надеюсь, что кто-то может помочь. У нас есть машина с Windows Server 2008 R2 с 16 ГБ ОЗУ, которая постоянно чем-то съедает всю доступную память. Ничто в диспетчере задач или мониторе ресурсов не обнаруживает никаких процессов, использующих память объемом более 300 МБ... но использование памяти на сервере составляет 15,7 ГБ.
Работают только SQL Server 2008 и IIS7.5 (с ASP.Net).
Примечание. Использование ОЗУ после перезагрузки начинается с низкого уровня и увеличивается. Примерно через неделю мы продолжаем обнаруживать себя в этой ситуации.
Как я могу узнать, что съедает всю нашу память?:(
6 ответов
Это 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
Прежде всего, как уже было сказано, исправьте его и посмотрите, решит ли это проблему.
Во-вторых, если это не сработало, используйте Process Explorer, чтобы лучше рассмотреть использование памяти. Перейдите в меню "Вид", затем выберите "Столбцы", "Память процесса" и проверьте параметры "Частные байты", "Виртуальный размер" и "Размер рабочего набора". Посмотрите, указывает ли это на то, что здесь винить.
Тогда решительным подходом будет попытка остановить сервисы. IIS, например, может быть полной памятью, если у вас неправильно настроены пулы приложений и веб-сады (их слишком много), так что это кандидат.
Удачи!
Вы проверяли Perfmon (особенно счетчики SQL), как это было предложено кем-то из вашего другого потока?