Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi DataSnap-Rest-Server frisst Arbeitsspeicher (https://www.delphipraxis.net/208695-datasnap-rest-server-frisst-arbeitsspeicher.html)

Maliko 8. Sep 2021 11:53

DataSnap-Rest-Server frisst Arbeitsspeicher
 
Hey ihrs,

ich hoffe ihr könnt mir da weiterhelfen, weil ich bin inzwischen mit meinem Latein am Ende. Und zwar habe ich einen Rest-Server über DataSnap, welcher in einem Windows-Service läuft. Solange er läuft benötigt er immer mehr Arbeitsspeicher (im Schnitt 200kb pro Minute). Die gibt er auch nicht wieder frei. Sprich es muss sich irgendwo ein Memoryleak befinden.

Da man Windows Services nicht debuggen kann, habe ich die Sourcen von der Schnittstelle aus einem anderen Projekt heraus geladen und starte die Schnittstelle über eine Form anstatt über den Service (sprich der einzige Unterschied in meiner Testumgebung ist, dass beim Debuggen der Windows-Service nicht läuft). Wenn ich das ganze jetzt starte, über meinen Rest-Client die Schnittstelle antrigger, die Schnittstelle wieder beende und das Programm schließe, dann meldet mir Deleaker, welcher mitgelaufen ist, dass keine Memoryleaks vorhanden sind. Im Taskmanager konnte ich allerdings eindeutig sehen, dass der Arbeitsspeicher zum Zeitpunkt des Requests um ca 100 kb hoch gegangen ist (daher 200kb pro Minute weil unser Monitoring die Schnittstelle alle 30 Sekunden einmal abfragt ob sie erreichbar ist).

Da auch Deleaker mir keine Leaks anzeigt und ich auch selbst nix mehr finde, hoffe ich dass vielleicht irgendjemand von euch auch so ein Problem schon einmal gehabt hat und mir dabei weiterhelfen kann. Falls ihr irgendwelchen Quellcode braucht einfach bescheid sagen was ihr braucht, dann poste ich den.

Vielen Dank schon einmal im Voraus.

Viele Grüße
Maliko

Der schöne Günther 8. Sep 2021 12:04

AW: DataSnap-Rest-Server frisst Arbeitsspeicher
 
Ich kenne "Deleaker" jetzt nicht, aber wenn am ordnungsgemäßen Anwendungsende keine Leaks gemeldet werden, dann ist es nichts was vergessen wird, sondern sich nur weiter anhäuft, um am Schluss wieder freigegeben zu werden.

Ich glaube mit FastMM kann man Snapshots machen und sich mitloggen lassen, wieviele TObject-artige-Instanzen bis zum aktuellen Zeitpunkt erstellt wurden.

Ansonsten, wenn du einen Ansatz hast, logge dir doch mal bei ein paar Kandidaten mit einer Klassenvariable wie oft der Konstruktor, und wie oft der Destruktor aufgerufen wurde und frag das zur Laufzeit ab.

Maliko 8. Sep 2021 12:15

AW: DataSnap-Rest-Server frisst Arbeitsspeicher
 
Deleaker ist eine kostenpflichtige Alternative zu FastMM (wir haben es nie geschafft FastMM vernünftig zum laufen zu bekommen und Deleaker funktioniert bei uns hingegen hervorragend). Die Idee mit den Snapshots ist vielleicht gar nicht mal so doof. Das kann Deleaker nämlich auch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf