Sonderbare Speichernutzung in Windows Server 2008 R2

20

Ich hoffe jemand kann helfen. Wir haben einen Windows Server 2008 R2- Computer mit 16 GB RAM, auf dem der gesamte verfügbare Arbeitsspeicher von etwas aufgezehrt wird. Nichts im Task-Manager oder im Ressourcenmonitor gibt Aufschluss über Prozesse, die mehr als 300 MB Arbeitsspeicher beanspruchen. Der Arbeitsspeicher auf dem Server beläuft sich jedoch auf 15,7 GB.

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

Die einzigen Dinge, die ausgeführt werden, sind SQL Server 2008 und IIS7.5 (mit ASP.Net).

Hinweis: Die RAM-Auslastung nach einem Neustart ist niedrig und steigt an. Nach ungefähr einer Woche finden wir uns in dieser Situation wieder.

Wie kann ich herausfinden, was unser gesamtes Gedächtnis frisst? :(

Django Reinhardt
quelle
1
Wie genau haben Sie "Nachdem die RAM-Auslastung von SQL Server (min / max) auf 13 GB begrenzt wurde, sollte dies nicht noch einmal vorkommen."? Ich verwende einen Win 2008 R2-Computer mit SQL 2008 R2 und habe dasselbe Problem.
Dies ist eine Einstellung in SQL Server Studio. Viel Glück!
Django Reinhardt
1
@ user72232: msdn.microsoft.com/en-us/library/ms178067.aspx
Tim Schmelter

Antworten:

15

Handelt es sich um einen 64-Bit-Server? Sind die Sperrseiten in der lokalen Speicherrichtlinie aktiviert? SQL verbraucht wahrscheinlich den Rest Ihres Speichers. Wenn Sie sich die Leistungsindikatoren ansehen, sehen Sie die Speicherzuordnung

Hier ist ein Artikel, der es ausführlich erklärt

Sie können die Leistungsindikatoren auch in SQL anzeigen

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
quelle
2
Das erklärt alles. Die Speichernutzung war "Alle verfügbaren verwenden" (dh 2000 TB) und da die Seiten im RAM gesperrt waren, hatte nicht jeder Zugriff darauf, als sie verwendet wurden. Da die RAM-Auslastung von SQL Server jetzt auf 13 GB begrenzt ist, sollte dies nicht mehr vorkommen. Ich habe jetzt mehrere Tools zur Verfügung, um auch Änderungen im Auge zu behalten. Danke für Ihre Hilfe!
Django Reinhardt
>> Ich habe jetzt mehrere Tools zur Verfügung, um auch Änderungen im Auge zu behalten - Welche Tools haben Sie verwendet?
David Christiansen
6

Schnelltest: Starten Sie SQL Server neu.
Ein weiterer schneller Test: Starten Sie IIS neu.

Sie werden sicher wissen, ob einer von ihnen der Täter ist oder ob Sie woanders suchen müssen.

Massimo
quelle
Sieht aus wie SQL der Schuldige war!
Django Reinhardt
3

Es kann hilfreich sein, RamMap zu verwenden, um zu sehen, wo sich Ihr Speicher befindet.

Sergei
quelle
1

Tritt bei Ihnen tatsächlich ein Speicherproblem auf?

Wird die Speichernutzung jemals höher als der tatsächlich installierte Speicher oder wird sie nur voll und bleibt dort?

Wenn der Speicher nur voll ist, Sie jedoch keine Probleme haben, erledigt der Cache nur seine Aufgabe. Der Speicher wird automatisch freigegeben, wenn Sie ihn tatsächlich benötigen.

Wenn die Speichernutzung die physische Grenze überschreitet und der Server zum Stillstand kommt, tritt ein Speicherverlust auf, der unbedingt behoben werden sollte.

Einige interessante Artikel zum Thema "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
quelle
Nun, wir konnten keine kritischen Windows-Updates installieren, ohne den Server zurückzusetzen, da ihm weiterhin der Arbeitsspeicher ausgeht. Ziemlich lächerlich. Was auch immer es benutzte, wollte es nicht zurückgeben.
Django Reinhardt
0

Haben Sie Perfmon (insbesondere die SQL-Zähler) überprüft, wie von jemandem in Ihrem anderen Thread vorgeschlagen?

mfinni
quelle
1
Ja, aber "Perfmon inspizieren" ist komplizierter als es sich anhört.
Django Reinhardt
0

Das erste ist, wie bereits gesagt, das Problem zu beheben.

Wenn dies nicht funktioniert hat, können Sie mit Process Explorer die Speichernutzung genauer untersuchen. Gehen Sie zum Menü Ansicht, wählen Sie Spalten aus, verarbeiten Sie Speicher und überprüfen Sie die Optionen Private Bytes, Virtuelle Größe und Arbeitssatzgröße. Sehen Sie, ob das darauf hindeutet, was hier schuld ist.

Ein drastischer Ansatz wäre dann, zu versuchen, Dienste zu stoppen. IIS kann zum Beispiel ein totales Speicher-Schwein sein, wenn Sie App-Pools und Webgärten falsch konfiguriert haben (zu viele von ihnen), das ist also ein Kandidat.

Viel Glück!

Maximus Minimus
quelle