Fatal Error / Speicherleck

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Fatal Error / Speicherleck

Beitrag von Wolfgang Ciriack »

Bekomme in einem Programmteil nach intensiver Nutzung einen Fatal Error EH:1006.
1006: two many memory-objects: there are not enough handles.
Im LOG sehe ich ca. 20-24 Threads, auch wenn bei mir alle Programmteile in extra Threads laufen, sollten es nur ca. 12-14 sein.
Frage: Wie kann ich feststellen, was (bzw. welche Objekte) im Speicher verbleibt und dadurch evtl. Threads nicht beendet werden ?
Es gab doch mal einen Profiler o.ä., kann man das damit feststellen ? Oder bessere/andere Möglichkeiten ?
Wie würdet ihr vorgehen, so etwas zu ergründen ?
Viele Grüße
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fatal Error / Speicherleck

Beitrag von georg »

Hallo, Wolfgang -


also, ich verwende eine eigene Thread-Klasse, die ich von der Standard-Klasse abgeleitet habe. Eine entsprechende Header-Datei sorgt dafür, dass aus allen Standard-Threads welche werden, die durch meine Klasse genudelt werden.

Es gibt dann eine Klassen-Variable (Array), in der ich hinterlege, welche Threads aktiv sind. Werden die Threads beendet, werden sie ausgetragen. Auf diese Art und Weise könntest Du zumindest nachvollziehen, welche Threads, die beendet sein sollten, noch offen sind.

Dann die üblichen Fragen: welche Xbase-Version, welches Windows, was sagt der Taskmanager zum Speicherverbrauch Deines Programms?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Fatal Error / Speicherleck

Beitrag von AUGE_OHR »

Wolfgang Ciriack hat geschrieben: Mi, 15. Nov 2017 19:25 Es gab doch mal einen Profiler o.ä., kann man das damit feststellen ? Oder bessere/andere Möglichkeiten ?
meinst du MEMWATCH.DLL ?

musst bei Alaska wohl anfragen ob es für v2.x die DLL gibt den die v1.9x Version wird wohl deshalb nicht mit der v2.x laufen
This_DLL_needs_version_1_90_0
---
was machst du denn so in den Threads ? baust du da "externe" Connection zu einem SQL Server auf ? DACsession ?
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fatal Error / Speicherleck

Beitrag von Jan »

Die memwatch.dll gibt es in der 2.0 immer noch. Wäre ja auch merkwürdig wenn nicht. Und der wäre sicher eine gute Idee, um das einzugrenzen.

Der Profiler könnte hier der falsche Weg sein. Wenn Du schreibst, das passiert "nach intensiver Nutzung". Ich habe mir in solchen Fällen schon Log-Dateien geschrieben von 3 GB Größe - da ist der bei den Auswertungen grandios abgestürzt. Das bringt in solchen Fällen also gar nichts.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Fatal Error / Speicherleck

Beitrag von Wolfgang Ciriack »

@Jimmy,
Ja, MEMWATCH meinte ich, kam nur nicht auf den Namen und wie man es einbindet.
@Georg,
ja, ich habe im Moment auch ein public Array, in dem die Threads verwaltet werden. Da sieht alles ok aus.

Habe jetzt mit MEMWATCH festgestellt, dass beendete Threads dort, wie auch im fatal errorlog noch angezeigt werden, das erklärt auch die Anzahl der Threads.
Über MEMWATCH werden sie bei Privates aufgelistet, man sieht dort, das sie NIL sind. Heist das, dass sie auch keine Handles mehr in Anspruch nehmen ?
Hätte gedacht, dass sie nach Beendigung gar nicht mehr zu sehen sind !?!
Viele Grüße
Wolfgang
Antworten