Speicherleck finden

Antworten
leosok
Beiträge: 24
Registriert: Mi 10. Nov 2010, 01:12

Speicherleck finden

Beitrag von leosok »

Hallo,

mein Programm beinhaltet einen Webserver, der mit Threads arbeitet. Das Programm funktioniert wie es soll, wenn es ein paar Stunden läuft. Nach einer längeren Zeit reagiert es allerdings nicht mehr. Irgendetwas scheint "vollzulaufen". Habt ihr eine Idee wie man so eine "undichte Stelle" am besten findet? (Und jetzt schreibe bitte keiner "unters Wasser halten")

Viele Grüße
leosok

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Speicherleck finden

Beitrag von m.fuchs »

Gegen Speicherlecks hilft HeapTrc. Kurze Anleitung unter http://lazarus-ccr.sourceforge.net/docs/rtl/heaptrc/usage.html
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Speicherleck finden

Beitrag von martin_frb »

Da das Programm als Server laueft, ist es vielleicht besser, einen kleinen (oder großen) stand-alone Test zu schreiben. Der kann dann typische http Requisits simulieren.

Allerdings, kann es sein das heaptrc nix findet. Wenn z.B. Objecte erzeugt werden, die erst am ende des Programms freigegeben werden (explizit vom Programm freigegeben, der Rest wird immer vom OS freigegeben). Heaptrc testet bei Programm ende.Und da die Freigabe dann im test (der ja endet) passiert, ist alles ok. Aber der Server laueft ja laenger, und all diese Objekte sammeln sich....

Eventuell ein logfile, und dann im Constructor/Destructor, ein Counter (globale variablen) per Klasse. Dann kannst du beobachten ob irgendeine Klasse unerwartet zunimmt.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Speicherleck finden

Beitrag von m.fuchs »

martin_frb hat geschrieben:Allerdings, kann es sein das heaptrc nix findet. Wenn z.B. Objecte erzeugt werden, die erst am ende des Programms freigegeben werden (explizit vom Programm freigegeben, der Rest wird immer vom OS freigegeben). Heaptrc testet bei Programm ende.Und da die Freigabe dann im test (der ja endet) passiert, ist alles ok. Aber der Server laueft ja laenger, und all diese Objekte sammeln sich....

Deswegen würde ich lieber ein Testsystem aufsetzen, wo wirklich eine Instanz des Servers läuft. Zwischendurch kann man mit DumpHeap auch schon mal eine Ausgabe von HeapTrc erzwingen. Ist dann zwar nicht besonders schön (weil alle laufenden Heap-Belegungen darin auftauchen), aber vielleicht hilft das ja.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

leosok
Beiträge: 24
Registriert: Mi 10. Nov 2010, 01:12

Re: Speicherleck finden

Beitrag von leosok »

Vielen Dank. Das gibt mir erst mal eine Richtung!
Grüße

Antworten