Utilisation étrange de la mémoire dans Windows Server 2008 R2

20

J'espère que quelqu'un pourra vous aider. Nous avons une machine Windows Server 2008 R2 avec 16 Go de RAM qui continue à consommer toute sa mémoire disponible par quelque chose. Rien dans le Gestionnaire des tâches ou le Moniteur de ressources ne révèle aucun processus utilisant une mémoire supérieure à 300 Mo ... mais l'utilisation de la mémoire sur le serveur est de 15,7 Go.

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

Les seules choses en cours d'exécution sont SQL Server 2008 et IIS7.5 (avec ASP.Net).

Remarque: l'utilisation de la RAM après un redémarrage commence à un niveau bas et progresse. Après environ une semaine, nous continuons à nous découvrir dans cette situation.

Comment puis-je découvrir ce qui mange toute notre mémoire? :(

Django Reinhardt
la source
1
Comment exactement avez-vous "Ayant maintenant limité l'utilisation de la RAM SQL Server (min / max) à 13 Go, cela ne devrait pas se reproduire."? J'exécute une machine Win 2008 R2 avec SQL 2008 R2 et je rencontre le même problème.
C'est un paramètre dans SQL Server Studio. Bonne chance!
Django Reinhardt
1
@ user72232: msdn.microsoft.com/en-us/library/ms178067.aspx
Tim Schmelter

Réponses:

15

S'agit-il d'un serveur 64 bits - la stratégie locale de verrouillage des pages en mémoire est-elle activée? SQL consomme probablement le reste de votre mémoire Si vous regardez les compteurs perfmon, vous verrez l'allocation de mémoire

Voici un article qui l'explique en profondeur

Vous pouvez également afficher les compteurs en 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
la source
2
Cela explique tout. L'utilisation de la mémoire consistait à "utiliser toutes les ressources disponibles" (c.-à-d. 2000 To) et avec les pages verrouillées dans la RAM, tout n'était pas accessible quand elle était en cours d'utilisation. Ayant maintenant limité l'utilisation de la RAM SQL Server (min / max) à 13 Go, cela ne devrait plus se reproduire. J'ai maintenant plusieurs outils disponibles pour surveiller également les changements. Merci de votre aide!
Django Reinhardt
>> Je dispose désormais de plusieurs outils pour surveiller également les modifications - Quels outils avez-vous utilisés?
David Christiansen,
6

Test rapide: redémarrez SQL Server.
Un autre test rapide: redémarrez IIS.

Vous saurez avec certitude si l'un d'eux est le coupable, ou si vous devez chercher ailleurs.

Massimo
la source
On dirait que SQL était le coupable!
Django Reinhardt
3

Il peut être utile d'utiliser RamMap pour voir où va votre mémoire.

Sergei
la source
1

Êtes-vous réellement confronté à un problème lié à la mémoire?

Est-ce que l'utilisation de la mémoire devient plus élevée que la mémoire installée réelle, ou se remplit-elle simplement et y reste-t-elle?

Si la mémoire se remplit mais que vous ne rencontrez aucun problème, c'est simplement le cache qui fait son travail; la mémoire sera automatiquement libérée si et quand vous en aurez réellement besoin.

Si l'utilisation de la mémoire dépasse la limite physique et que le serveur s'arrête, vous rencontrez une fuite de mémoire et vous devriez certainement la déboguer.

Quelques articles intéressants sur le sujet "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
la source
Eh bien, nous ne pouvions pas installer de mises à jour critiques de Windows sans réinitialiser le serveur car il manquait de RAM. Assez ridicule. Quoi qu'il en soit, je ne voulais pas le rendre.
Django Reinhardt
0

avez-vous inspecté Perfmon (en particulier les compteurs SQL), comme suggéré par quelqu'un dans votre autre thread?

mfinni
la source
1
Oui, mais "inspecter Perfmon" est plus compliqué qu'il n'y paraît.
Django Reinhardt
0

La première chose à faire, comme cela a été dit précédemment, est de le corriger et de voir si cela résout le problème.

Deuxièmement, si cela ne fonctionne pas, utilisez Process Explorer pour obtenir un meilleur aperçu de votre utilisation de la mémoire. Accédez au menu Affichage, puis sélectionnez Colonnes, Mémoire de processus et vérifiez les options Octets privés, Taille virtuelle et Taille de l'ensemble de travail. Voyez si cela indique ce qui est à blâmer ici.

Une approche drastique serait alors d'essayer d'arrêter les services. IIS par exemple peut être un cochon de mémoire totale si vous avez des pools d'applications et des jardins Web mal configurés (trop nombreux), c'est donc un candidat.

Bonne chance!

Maximus Minimus
la source