PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicherleck finden


greg
2016-04-30, 14:40:32
Hallo,

ich habe eine Anwendung bei der permanent der Speicherverbrauch ansteigt bis zum Absturz mit der Meldung: "zu wenig Arbeitsspeicher".
Gibt es relativ einfache Mittel mit denen ich ohne den Quellcode der Anwendung ein Memory Leak nachweisen kann?

kruemelmonster
2016-04-30, 15:21:05
RAMMap (https://technet.microsoft.com/en-us/sysinternals/ff700229) und VMMap (https://technet.microsoft.com/en-us/sysinternals/vmmap)

Monger
2016-04-30, 21:06:39
RAMMap (https://technet.microsoft.com/en-us/sysinternals/ff700229) und VMMap (https://technet.microsoft.com/en-us/sysinternals/vmmap)
Die helfen aber nur dabei herauszufinden ob man ein Speicherleck hat, aber nicht wie man es fixt, oder?
Dafür braucht es normalerweise einen geeigneten Profiler.

sei laut
2016-04-30, 21:29:50
Die helfen aber nur dabei herauszufinden ob man ein Speicherleck hat, aber nicht wie man es fixt, oder?
Dafür braucht es normalerweise einen geeigneten Profiler.
Der Threadstarter will es auch nicht fixen..

Exxtreme
2016-04-30, 22:28:46
Der Boehm-Weiser GC kann dazu missbraucht werden:

http://hboehm.info/gc/leak.html

Falls man den Sourcecode der Anwendung hat und man diese auch bauen kann.

myMind
2016-04-30, 22:39:09
Windows hat alles dabei, um den Speicherverlauf zu verfolgen: perfmon.msc. Nicht sehr komfortabel, aber sehr robust und universell.

- Anwendung starten
- perfmon.msc
- Leistungsindikator "Prozess" auswählen
- Prozess der Anwendung auswählen
- 3 Leistungsindikatoren hinzufügen
-- Perfmon / Task-Manger / Resourcenmonitor
-- Arbeitsseiten - privat / Arbeitsspeicher (privater Arbeitssatz) / Privat
-- Private Bytes / Zugesicherte Größe / Zugesichert
-- Arbeitsseiten / Arbeitssatz (Speicher) / Arbeitssatz
- Skalierung der Leistungsindikatoren anpassen, so dass die Werte im Diagramm liegen
- Eigenschaften
-- Allgemein: Dauer erhöhen wie notwendig, Stichprobe entsprechend erhöhen

Somit lässt sich der steigende Speicherbedarf über die Zeit visualisieren. Es lassen sich auch sehr lange Zeiten einstellen.
Wenn der Speicher stetig ansteigt, obwohl nicht mehr Daten geladen werden > Leak

http://www.digitalcitizen.life/basics-about-working-performance-monitor

greg
2016-05-02, 14:03:53
Danke schon mal :)
Es werden Daten im Laufe der Nutzung nachgeladen, dadurch steigt auch der RAM Verbrauch. Allerdings vermute ich das die vorherigen Speicherbereiche nicht freigegeben werden.

So wächst der Bedarf im Lauf der Zeit auf ~ 2GB und die 32 Bit Anwendung stürzt aufgrund Speichermangels ab.

PatkIllA
2016-05-02, 14:54:52
Danke schon mal :)
Es werden Daten im Laufe der Nutzung nachgeladen, dadurch steigt auch der RAM Verbrauch. Allerdings vermute ich das die vorherigen Speicherbereiche nicht freigegeben werden.Gut möglich. Wie genau welcher Speicher verwendet wird kann man aber nur sagen, wenn man das Programm kennt, den Quellcode hat oder das auf Assemblerebene analysieren will.

Warum meldest du das Problem nicht dem Hersteller?

So wächst der Bedarf im Lauf der Zeit auf ~ 2GB und die 32 Bit Anwendung stürzt aufgrund Speichermangels ab.Das kannst du mit dem LAA Flag nach hinten verschieben. Auch wenn es keine wirklich Lösung ist.

greg
2016-05-02, 16:11:03
Ist dem Hersteller gemeldet aber es regt sich nix, ich hoffte ihm es Mundgerecht servieren zu können ala da werden 400 MB alloziert und nie wieder freigeben.

Und generell würde es mich interessieren inwiefern man das Verhalten eines Programms ohne seinen Quellcode nachvollziehen kann.

Die Anwendung ist übrigens in .Net geschrieben.

PatkIllA
2016-05-02, 16:28:48
.NET kann man quasi zum Quell dekompileren. Selbst den IL Code kann man noch halbwegs lesen.

Es gibt Memory Profiler, die zeigen einem an von welchen Objekten wieviele Instanzen welcher Klasse vorhanden sind. Mit mehren Snapshots kann man dann Vergleiche machen und erkennen wovon stetig mehr Speicher verbraucht wird. Das geht AFAIK auch ohne Quellcode oder Symboldateien der Anwendung.

In Visual Studio ist auch was eingebaut.
Das sollte mit Einschränkungen auch ohne Quelltext gehen.
https://blogs.msdn.microsoft.com/visualstudioalm/2014/04/02/diagnosing-memory-issues-with-the-new-memory-usage-tool-in-visual-studio/