Uso estranho de memória no Windows Server 2008 R2

20

Espero que alguém possa ajudar. Temos uma máquina Windows Server 2008 R2 com 16 GB de RAM que continua recebendo toda a memória disponível consumida por alguma coisa. Nada no Gerenciador de Tarefas ou no Monitor de Recursos revela qualquer processo usando memória acima de 300 MB ... mas o uso de memória no servidor é de 15,7 GB.

https://i784.photobucket.com/albums/yy129/ThunderPeel2001/ram-usage.gif

As únicas coisas em execução são o SQL Server 2008 e o IIS7.5 (com ASP.Net).

Nota: O uso da RAM após uma reinicialização começa baixo e sobe. Depois de uma semana ou mais, continuamos nos encontrando nessa situação.

Como posso descobrir o que está comendo toda a nossa memória? :(

Django Reinhardt
fonte
11
Como exatamente você "Tendo agora limitado o uso de RAM do SQL Server (min / max) a 13 GB, isso não deve acontecer novamente."? Estou executando uma máquina Windows 2008 R2 com o SQL 2008 R2 e o mesmo problema.
É uma configuração no SQL Server Studio. Boa sorte!
Django Reinhardt
11
@ user72232: msdn.microsoft.com/en-us/library/ms178067.aspx
Tim Schmelter

Respostas:

15

Este é um servidor de 64 bits - as políticas de bloqueio de páginas na memória estão ativadas? Provavelmente, o SQL está consumindo o restante de sua memória. Se você olhar nos contadores de perfmon, verá a alocação de memória

Aqui está um artigo que explica detalhadamente

Você também pode visualizar os contadores no 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)' )
CPU_BUSY
fonte
2
Isso explica tudo. O uso da memória era "use all available" (ou seja, 2000 TB) e, com as páginas bloqueadas na RAM, nem tudo tinha acesso a ela quando estava em uso. Agora, tendo limitado o uso de RAM do SQL Server (min / max) a 13 GB, isso não deve acontecer novamente. Agora também tenho várias ferramentas disponíveis para acompanhar todas as alterações. Obrigado pela ajuda!
Django Reinhardt
>> Agora também tenho várias ferramentas disponíveis para vigiar as alterações - Quais ferramentas você usou?
David Christiansen
6

Teste rápido: reinicie o SQL Server.
Outro teste rápido: reinicie o IIS.

Você saberá com certeza se um deles é o culpado ou se precisa procurar outro lugar.

Massimo
fonte
Parece que o SQL foi o culpado!
Django Reinhardt
3

Pode ser útil usar o RamMap para ver para onde vai sua memória.

Sergei
fonte
1

Você está realmente tendo algum problema relacionado à memória?

O uso da memória se torna mais alto que a memória instalada real ou apenas enche e fica lá?

Se a memória apenas enche, mas você não está enfrentando nenhum problema, é apenas o cache fazendo seu trabalho; a memória será liberada automaticamente se e quando você realmente precisar dela.

Se o uso da memória estiver acima do limite físico e o servidor parar, então você está tendo algum vazamento de memória e definitivamente deve depurá-lo.

Alguns artigos interessantes sobre o tópico "cache":

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

Massimo
fonte
Bem, não foi possível instalar nenhuma atualização crítica do Windows sem redefinir o servidor porque ele ficava sem memória RAM. Muito ridículo. O que quer que estivesse usando, não queria devolvê-lo.
Django Reinhardt
0

você inspecionou o Perfmon (especificamente os contadores SQL), conforme sugerido por alguém em seu outro segmento?

mfinni
fonte
11
Sim, mas "inspecionar Perfmon" é mais complicado do que parece.
Django Reinhardt
0

A primeira coisa é, como já foi dito antes, corrigi-lo e ver se isso resolve o problema.

Em segundo lugar, se isso não funcionar, use o Process Explorer para obter uma melhor visão do uso da memória. Vá para o menu Exibir, selecione Colunas, Processar memória e marque as opções Bytes particulares, Tamanho virtual e Tamanho do conjunto de trabalho. Veja se isso indica o que é o culpado aqui.

Uma abordagem drástica seria tentar interromper os serviços. O IIS, por exemplo, pode ser um porco com memória total, se você tiver pools de aplicativos e jardins da Web mal configurados (muitos deles); portanto, esse é um candidato.

Boa sorte!

Maximus Minimus
fonte