Diverse Abstürze (Speicherproblem)?

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Diverse Abstürze (Speicherproblem)?

Beitrag von Dominik Krebs »

Guten Morgen,
wir kämpfen seid einiger Zeit an einer Baustelle.
Wir haben eine "Server-Anwendung" auf der mit Main-Thread 10 Threads laufen.
Einige Threads lesen Xml Dateien ein und verarbeiten diese, andere geben verschiedene Daten, zB Json aus.

Nun stehen wir vor dem Problem das wir immer wiederdDiverse Fehler bekommen. Bei einigen dieser Fehler bleiben alle Threads stehen, bei anderen nur der Betroffene. Anfangs dachten wir das dies alles verschiedene Fehler sind, jedoch glauben wir nun das alle nun die selbe Ursache haben, die wir aber einfach nicht finden können. Uns fehlt es einfach an Erfahrung. Wir vermuten das hier ein Speicher vollläuft?

Anbei habe ich einige dieser Fehler in einer PDF angehängt
Fehler.pdf
(97.61 KiB) 107-mal heruntergeladen
Vielleicht hat jemand eine Idee und erbarmt sich unserer ...

Liebe Grüße aus Hanau!
Gruß Dominik
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14061
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 6 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Jan »

Moin Dominik,

womit lest Ihr denn die XML ein? Wandelt Ihr die in DataObjects? Oder per XmlSimpleParser? Ich arbeite viel mit letzterem. Und habe die Erfahrung gemacht das man nicht genug abfragen kann ob die einzelnen Nodes wirklich existieren. Das mache ich meist mit :getChild().

Bei DataObjects gibt es unter bestimmten Bedingungen einen Speicherfehler, siehe PDR 7280. Allerdings sehe ich bei Dir keine Fehlermeldungen, die auf einen Speicherproblem hinweisen. Ich bekomme dann regelmäßig einen Laufzeitfehler mit der Meldung "Nicht genügend Speicher".

Das allerdings manchmal alle Threads stehen bleiben finde ich aber schon irritierend. Könnte auf die von Dir erwähnten Speicherprobleme hinweisen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Dominik Krebs »

Hallo Jan,
vielen Dank erstmal für deine Antwort.

Wir lesen die XML Dateien via beforAtNum und AfterAtNum ein.
zB:

Code: Alles auswählen

IIF(NumAt("<Anrufer>",cDaten) > 0, oADAuftrag_App:aanrufer:asString := AfterAtNum("<Anrufer>",BeforAtNum("</Anrufer>",cDaten,1),1), )
Den Laufzeitfehler "Nicht genügend Speicher" haben wir so noch gar nicht erhalten.

Alle Threads bleiben auch nur stehen wenn der Fehler auf der PDF Seite 5 geworfen wird.
Es ist wie als wäre die Datenbank abgehängt. Aber dies ist wohl nicht der Fall, auch in der ads_err kann ich keine Fehler finden...
Gruß Dominik
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14061
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 6 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Jan »

Hallo Dominik,

aber was sind das dann für nicht existierende Methoden? Stammen die aus Euren eigenen Klassen? Ich hatte jetzt erwartet das die aus der eingelesenen XML stammen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Dominik Krebs »

Oh ich dachte bis eben das wären Boardmittel von Xbase.
Dann wurde sie möglicherweise von Friedhelm Göder aus Clipper übernommen.

Hast du dir denn alle Fehler mal angeschaut?
Gruß Dominik
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 16 Mal
Danksagung erhalten: 68 Mal
Kontaktdaten:

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Tom »

Es soll in "Appauftragportaabschlussprf" und dort in Zeile 4436 auf die iVar "tbuploaderfolg" zugegriffen werden, aber das Objekt, an dem sie vermeintlich hängt (die Zeile lautet wahrscheinlich "IF oObject:tbuploaderfolg" oder so), kennt diese iVar überhaupt nicht. Wie lautet der Code in dieser Zeile? Ist das fragliche Objekt möglicherweise PUBLIC und wird in mehreren Threads manipuliert?
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14061
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 6 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Jan »

Keine der aufgerufenen Funktionen oder Methoden sagt mir irgend was.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Dominik Krebs »

Hallo Tom,

Die Zeile wäre wie folgt:

Code: Alles auswählen

IF oADAuftrag:tbuploaderfolg:asString = "1"
oADAuftrag2:r_id:asString := PortaRechnungGenerierenFunk(oADAuftrag,oADAuftrag2,oSoapClient,oServVar)
IIF( len(oADAuftrag2:r_id:asString) > 0,oADAuftrag2:portaabschluss:asString := "1" , )
ENDIF
tbuploaderfolg ist ein Datenbankfeld in einer ADT Tabelle, oADAuftrag ist demnach eine geöffnete Datenbank.

Die Variable ist nicht Public, Sie wird Local deklariert und nach durchlauf auf NIL gesetzt.

@Jan,
Es wurden damals viele Funktionen aus Clipper übernommen mir war nicht bewusst das dies eine davon ist.
Ich schreibe Xbase erst seit ca 2-3Jahren.
Gruß Dominik
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Dominik Krebs »

Die Angeblichen Klassen die in der Fehlermeldung auftauche, sind mir auch unbekannt.

Hat denn niemand eine Idee wo wir ansetzen könnten? :?
Gruß Dominik
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 314
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 4 Mal
Danksagung erhalten: 39 Mal
Kontaktdaten:

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Marcus Herz »

Kann es sein, dass die Fehlermeldungen sich auf eine ADS Klasse, welche eine Tabelle repräsentiert, schon geschlossen ist, aber noch ein Zugriff erfolgt?
Die letzte Meldung kommt ja von einer Klasse AceTable. Wenn Friedhelm das mal umgesetzt hat, hat er bestimmt solche Tabellenobjekte erzeugt.
Das Tabellenobjekt scheint nicht mehr korrekt zu sein, wie auch immer. Ich habe schon erlebt, dass sich Code "überholt", vor allem in Threads. Da wird noch was weggeschrieben, obwohl schon ein Destroy oder sowas erfolgt ist. Werden die Threads geschlossen? Jeder Thread hat ja eine eigene Connection, wie wird die verwaltet? Irgendwo da muss das Problem entstehen, aber ohne Code tapp auch ich im Dunkeln
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Dominik Krebs »

Ja es bezieht sich auf eine ADS Klasse. Geschlossen ist diese nicht, aber das mit dem "überholt" hört sich interessant an. Von der Theorie passt das auch zum Fehlerbild.

Jeder Thread hat seine eigene Connection die in der :atStart Methode connected und in der atEnd Mehtode getrennt wird.
Die Connections sind auch dauerhaft verbunden, werden also beim starten verbunden und beim beenden der Applikation getrennt.

Ich stelle gerne Quelltext zur Verfügung. Es gestaltet sich nur schwierig, da der Fehler immermal wo anders auftaucht und sich so keine genaue stelle ausmachen lässt. Ich weiß nur umso enger die Taktung des Threads desto wahrscheinlicher treten Fehler auf.
Gruß Dominik
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 19942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 46 Mal
Danksagung erhalten: 29 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Manfred »

die Funktionen stammen aus dem TOOLS 3, die serienmäßig mittlerweile dabei sind.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kannste sein, Hauptsache pfiffig!!
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Dominik Krebs »

Guten Morgen zusammen,
mittlerweise haben wir das besagte Programm in einen Dienst gewandet und haben jede Codezeile überarbeitet.
Wie bereits bekant laufen mehrere Threads und durch den Umzug konnten wir den Übeltäter Thread ausfindig machen.
Den Speicherfehler haben wir übrings mit übernommen und suchen noch nach wie vor woher er kommt...

Meine Frage:
Wie komme ich einem Speicherfehler bei einem Dienst am besten auf die Spur. Gibt es aktuell bekannte Klassen die vielleicht irgendwelche Handels nicht mehr frei geben ?

Wir kämpfen mit diesem Problem nun schon seit mehr als einem Jahr ...
Gruß Dominik
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14061
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 6 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Jan »

Dominik,

es gab da tatsächlich diverse Funktionen, die Speicherprobleme hatten. Die sind alle inzwischen behoben, soweit ich weiß. Was noch offen ist (und mich eine Menge Zeit und Nerven gekostet hat, bis Alaska das bestätigt hat): Wenn man den Profiler einbindet, knallt das relativ schnell mit IDSC oder Speicherknappheit. Lt. Alaska soll das mit dem nächsten Update behoben sein. PDR 7369.

Wenn Du also mit dem aktuellen Build der 2.0 arbeitest sollte das von daher sauber laufen können. Außer Du hast da noch was gefunden, was bislang unentdeckt geblieben war.

Nachtrag: Es gibt tatsächlich noch einen über 12 Jahre alten PDR 5993 über ein Speicherleck, der offen ist. Jedes Öffnen einer dbf im ADS kostet 32 Byte (ich glaube das war die Menge). Seitdem ich in Threads zum Ende nicht mehr alle dbf schließe, und beim Threadstart per WorkSpaceList() kontrolliere ob die jeweiligen Tabellen noch vom vorigen Durchlauf offen sind und nur bei Bedarf im ersten Durchlauf öffne, habe ich da erhebliche Ruhe rein gebracht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2091
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 7 Mal
Danksagung erhalten: 22 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von ramses »

Dominik Krebs hat geschrieben: Mi, 10. Feb 2021 8:39 Wir kämpfen mit diesem Problem nun schon seit mehr als einem Jahr ...
Hallo Dominik

ich habe meine Erfahrungen mit diesem Problem vor Jahren gesammelt, vielleicht sind die wirklich nicht mehr aktuell.
Damals hatte ich auch grosse Probleme. Auf einen Tip hin habe ich dann alle Funktionen aus den Tools3 aus dem Code entfernt und oder und durch in Xbase Code nachgebaute Funtionen unter Verwendung von OT4XB ersetzt. Seither hatte ich nie mehr Probleme.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14061
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 6 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von Jan »

Carlo,

interessant. Ich habe eher die gegenteilige Beobachtung: Je mehr ot4xb ich raus werfe, um so stabiler werden meine Projekte. Etwas, das Alaska mir mal vor einiger Zeit auch bestätigt hat.

Wobei ich so gut wie keine Tools-Funktionen verwende. Das Problem, die irgend wie ersetzen zu müssen, habe ich also nicht mehr, seitdem ich vor langr Zeit die auch raus geworfen hatte (aus rein praktischen Erwägungen, da ein paar DLL weniger ausliefern zu müssen).

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2091
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 7 Mal
Danksagung erhalten: 22 Mal

Re: Diverse Abstürze (Speicherproblem)?

Beitrag von ramses »

Hallo Jan

auf die OT4XB zu verzichten war auch mal ein Projekt das ich wollte. Das ist leider nicht ganz einfach. Für vieles gibt es keinen Ersatz oder es würde zu viele Codeteile betreffen. Ich habe das aufgegeben nachdem ein Bekannter C Programmierer aus dem Source eine lauffähige abgespeckte DLL erzeugen konnte. Evtl. ist die Zuverlässigkeit ja auch abhängig davon welche Funktionen du aus ot4xb verwendest.

Wenn du die aktuellen ADS-DLL die zu deiner Serverversion passen ( axcws.dll ace32.dll ) nimmst ist vielleicht auch das 32-Byte Problem nicht mehr zu sehen.

Dein Weg möglichts keine Tools Funktionen zu verwenden ist ein sehr guter Weg. Er deckt sich auch mit meinen Erlebnissen in MultiThread Programmen.
Valar Morghulis

Gruss Carlo
Antworten