tl; dr: Laden Sie alle 5 Dateien von FindZombieHandles herunter, führen Sie sie aus und sehen Sie, welcher Prozess alle Zombies erstellt.
Sie haben dieses Problem zu Recht bemerkt. 1
Es gibt einige häufige Ursachen:
- Ein Handle-Leck, insbesondere von GDI-Objekten
- Ein Handle-Leck, das zu Zombie-Prozessen führt
- Treibersperrter Speicher, der auf einen fehlerhaften Treiber oder sogar auf einen normalen Betrieb zurückzuführen ist (z. B. "VMware Ballooning" wird Ihren Arbeitsspeicher absichtlich "fressen", um ihn unter den VMs auszugleichen)
Weitere Informationen erhalten
Als Erstes können wir das ausgezeichnete RAMMap- Tool verwenden, mit dem die breiten Kategorien identifiziert werden, unter denen die Speicherauslastung liegt. Diese sagen nicht unbedingt aus, was es war, aber geben Ihnen einen Vorschlag, wo Sie als nächstes suchen müssen.
In Ihrem speziellen Fall verweise ich auf den von Ihnen zur Verfügung gestellten Screenshot . Sie möchten sich die Active
Spalte ansehen - die Standby
Spalte enthält Caches, die unter "verfügbarer" Arbeitsspeicher fallen. Die Bekanntmachung Page Table
ist sehr hoch - ich würde erwarten, dass sie sich in einer Größe von unter 512 MB befindet, nicht weit über 2 GB!
Verengung
Von hier aus können wir vermuten, dass dies wahrscheinlich auf Zombie-Prozesse zurückzuführen ist. Ein Zombie-Prozess kann in Windows auftreten, wenn ein Prozess einen anderen startet, der einen Handle für den gestarteten Prozess enthält. Wenn der gestartete Prozess beendet ist, wird erwartet, dass der Startprozess diese Handles freigibt. Wenn dies nicht geschieht, bleiben sie so lange in der Nähe, wie der Startvorgang besteht.
Auf der Registerkarte "Prozesse" von RAMMap können Sie tatsächlich eine weitere Bestätigung erhalten. Beachten Sie in Ihrem Fall, Sortieren nach Prozessnamen, die Tausende von tasklist.exe
und Hunderten von powershell.exe
Instanzen rumhängen. In der Tat ist alles, was mit privatem Speicher belegt 0 K
ist, die rote Flagge eines Prozesses, der beendet wurde, aber immer noch im Zombie-Modus ist.
Nun müssen Sie herausfinden, welcher Prozess alle diese Zombies erzeugt. Es gibt einige Möglichkeiten, dies zu tun. Sie können den Task-Manager auf der Registerkarte "Details" verwenden und die Spalte "Handles" hinzufügen. Jeder Prozess, der eine große Anzahl von Zombies enthält, hat auch eine zu große Anzahl von Griffen. Sie können Process Explorer auch verwenden, um anzuzeigen, welche Handles für einen bestimmten Prozess geöffnet sind.
Die einfachste Möglichkeit ist jedoch die Verwendung von FindZombieHandles 2 (Sie müssen alle 5 Dateien in dasselbe Verzeichnis herunterladen). Wenn Sie dieses Tool (als Administrator) ausführen, sollte es Ihnen sagen, welcher Prozess alle diese Zombies erstellt und speichert. Von dort aus können Sie den Prozess beenden, die Anwendung deinstallieren oder dem Entwickler melden.
1 Wie bereits an anderer Stelle erläutert, wird auf der Registerkarte "Prozesse" des Task-Managers die Speichernutzung mit Ausnahme von Festplattencaches angezeigt. Die allgemeine (Linux) Erklärung von "freier Arbeitsspeicher ist verschwenderisch" trifft normalerweise nicht zu. Für den Task-Manager ist der Festplatten-Cache Teil des verfügbaren Speichers. "Freier" Speicher wird nicht erwähnt.
2 Ein großes Dankeschön an Bruce Dawson für dieses Tool.