XB2.NET: Threads werden teilweise nicht freigegeben

Xb2.Net von Boris Borzic

Moderator: Moderatoren

Antworten
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Moins,
ich habe ein Problem mit meinem XB2.NET-Server, der als Dienst läuft (auch schon mal an anderer Stelle angedeutet).
Auf meinem virtuellen Server (W2K3 64 Bit, 768 MB RAM) laufen nach einer gewissen Zeit (bestimmte Menge an Zugriffen) die Ressourcen voll, so dass der ServiceManager von Windows meinen Dienst beendet und neu startet.
Wenn ich meinen Service starte, belegt er um die 19 MB RAM, 12 Threads (davon werden ja 10 von XB2.NET pro forma gestartet, um auf Anfragen schneller reagieren zu können) und einige handles (habe mir die Zahl jetzt nicht gemerkt, ist aber im unteren drei-Stelligen Bereich).
Wenn der Dienst dann abschmiert, sieht das Bild schon ganz anders aus (habe mal zufälligerweise geschaut, kurz bevor es soweit war): über 700 MB RAM, mehr als 500 Threads und handles im oberen 4 stelligen Bereich :!:
Ich habe nun die Vermutung, dass Threads nicht ordentlich freigegeben werden durch XB2.NET, wenn diese "verfallen". Die User klicken sich durch mehrere Seiten durch und erst auf der letzten - wenn sie dann auf den Fertig-Knopf klicken - wird ein :closeSession() abgesetzt.
Den :LingerTimeout() habe ich auf 120 gesetzt - dies funzt auch insofern, als dass nach der gewissen Zeit die sessions verfallen sind (sehe ich in den Logs - wenn die Leute anfangen und dann erst mal mit den Hunden rausgehen und Abendbrot essen und danach weitermachen wollen, werden sie automatisch wieder auf die Startseite geschickt, da die Session abgelaufen ist). Ich vermute nun aber mal, dass die Session zwar "weg" ist, aber der Thread trotzdem weiter läuft.
Gibt es da noch irgendetwas, das ich konfigurieren kann???

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Tom »

Hallo, Martin.

Ich stelle das mit meinem Xb2.Net-Serverdienst mal nach und lasse Dich morgen wissen, was dabei herausgekommen ist.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Hallo Tom,
vielen Dank :!:
Ich nutze Process Explorer von MS, um die Anzahl der handles/Threads/RAM zu sehen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Moins,
ich habe mal mit ProcessExplorer den aktuellen Stand in eine Datei gedumpt und angepappt.
Von den derzeit 60 Threads (5mal so viele wie nach dem Start des Dienstes) ist der Großteil (42) im Status "Wait:UserRequest", 15 sind im Status Ready, 1 im Status "Wait:DelayExecution" und der Mainthread ist im Status "Wait:Executive" - wobei das natürlich immer mal leichte Schwankungen gibt, aber der Großteil ist halt im Wait:UserRequest
Und ich vermute mal, dass dies "abgebrochene" Sessions sind...

Viele Grüße,
Martin
Dateianhänge
EASYDOG-SERVER.EXE.zip
Prozess- und Speicherbelegung
(5.28 KiB) 386-mal heruntergeladen
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Rudolf »

Hallo Martin,
habe auch eine komplexe Anwendung mit XB2NET laufen, aber bis derzeit kein Problem, läuft echt super. Habe den Process Explorere trotzdem mal auf dem Server installiert um die Anzahl der Threads zu prüfen. Wo finde ich das ? Ich habe zwar die Applikation, die Prozess ID, und bei den Eigenschaften sehe ich unter Threads ca. 22 Einträge. Darin sind vor allem XPPRT1.DLL Einträge. Scheint also bei mir problemlos zu laufen. Könnte mir nur vorstellen, daß Du einen Programmfehler hast, und der Thread nach dem Abbruch weiterläuft. Im Prinzip funktioniert XB2NET meiner Meinung nach problemlos.
Grüsse
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Hallo Rudolf,
ich habe jetzt (bisher) mit den aktuellen Versionen (Xbase++ und Xb2.NET) auch nicht mehr die starken Probleme.
Die Anzeige der Threads mußt Du aktivieren - einfach im PE auf die Spaltenüberschriften mit rechts klicken und dann select columns auswählen.
Dann auf dem Register Process Performance auf den Eintrag Threads klicken.
Bei mir sind es schon wieder 82 Threads (Server läuft seit 16 Tagen, 11 Stunden, 8 Minuten - in der Zeit gab es 5.696 Zugriffe, also insgesamt recht ruhig aktuell).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Rudolf »

Hallo Martin,
danke für die Info, werde aber trotzdem das Ganze zur Sicherheit weiter beobachten.
Grüsse
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von brandelh »

Hi,

wie sieht denn die CPU Belastung auf dem Server mit den vielen nicht freigegebenen Threads aus ?
Wenn die keinen Zeit verbrauchen wäre es ja nicht so schlimm.

Wobei irgendwelche Resourcen werden immer verbraucht.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Hubert,
das ist unkritisch!
Kritisch ist die Summe der Threads - und damit die Ressourcen!
Handles ist hier das Stichwort....
Und die sind halt endlich - leider :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von brandelh »

Hi,

da hilft nichts, Ihr müsst einen Wartungsneustart einbauen :D
ähnlich der Zwangstrennung einer DSL Leitung ;-)
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Nein :D - zu einfach!
Ich muss den Fehler finden!
Früher (in den ersten Versionen) gab es die Probleme noch nicht.
Da habe ich eine ältere Version von XbzLib genutzt.
Die Mails wurden noch per Commandline (blat) versandt.
Und - latürnich - ältere Versionen von XB2.NET und Xbase++.
Nun hängt da mittlerweile schon so viel dran (und auch entsprechend viele Routinen dazu) und das ganze läuft natürlich in einzelnen Threads...
Aber ich bin der Meinung, dass alle ordentlich beendet werden!
Am Senden der Mails kann es eigentlich nicht liegen (dann müssten es wesentlich mehr Threadleichen sein in dem Zeitraum).
Am Zippen kann es eigentlich nicht liegen (die selbe Begründung)!
Ich vermute eher, dass der Server nicht richtig mitbekommt, wenn der client einfach nicht weiter surft! Die timeouts sind zwar (eigentlich) gesetzt, aber die Session direkt wird nur dann explizit mit :close beendet, wenn der User bis zum Ende durch klickt und auf Fertig klickt.
Wenn er mittendrin einfach aufhört, scheint es die Probleme zu geben - wobei bei ihm der timeout zum Tragen kommt! Wenn er nämlich nach vier Stunden vom Gassi gehen (oder was auch immer) zurück kommt und auf weiter klickt, kommt (am Server) eine entsprechende Fehlermeldung ins Log und er wird wieder auf die Startseite redirected und fängt von vorne an...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Rudolf »

Hallo Martin,
habe das Ganze mal kurz getestet. Am Anfang hatte ich 22 Threads laufen. Dann habe 2 Sessions aufgemacht, hat sich auf 24 erhöht. Nach dem Beenden der Sessions ist es bei 24 Threads geblieben. Habe danach wieder ein paar Sessions gestartet, die Anzahl der Threads ist gleichgeblieben. Nur die Anzahl der Handles ändert sich dynamisch.
Grüsse
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Hallo Rudolf,
also steigt bei Dir die Anzahl der Threads auch an.
Die Handles ändern sich dynamisch - das bedeutet aber, dass sie auf lange Sicht dauerhaft ansteigen, oder?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Rudolf »

Hallo,
habe das Programm jetzt mal beendet und neu gestartet, 11 Threads und 500 Handles, vor dem Beenden waren es über 700. Kurz danach waren es ohne irgendwelche Zugriffe 11 Threads und 498 Handles. Danach habe ich 3 Sessions gestartet, ist auf 12 Threads gestiegen und 527 Handles.
Nach dem Beenden der Sessions hat sich nichts geändert. Ich werde das Ding mal eine laufen lassen und weiter kontrollieren.
Grüsse
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Hallo Rudolf,
vielen Dank - tröstlich, dass ich scheinbar nicht alleine bin mit dem Problem...

BTW, wäre schön, wenn Du Dein Profil mal korrigieren könntest - mit Deinem Bild (Avatar) stimmt was nicht, man sieht nur einen leeren Platzhalter...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Rudolf »

Hallo Martin,
sorry, ist mir noch gar nicht aufgerfallen, werde das Bild wieder reingeben, ist irgendwann mal hier verschwunden
Grüsse
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Hallo Rudolf,
kein Problem - ist beim Aufsetzen der neueren Forenversion passiert.
Das Problem haben noch andere...

Viele Grüße,
Martin

Schick - vielen Dank!
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender 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: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Wolfgang Ciriack »

Hallo Martin und Rudolf,
zur Info: aus dem express++ Forum weis ich, dass von Alaska bestätigt wurde, das es Probleme mit dem GC gibt bei ACCESS/ASSIGN Methoden gibt, die von einem Codeblock aus dem Orginal-Thread aufgerufen wurden. Das wird wohl in xb2net viel genutzt.
Roger muss seinen Server alle paar Tage neu starten, und er meinte, dass könnte der Grund sein.
Jack Duijf hat wohl eine neue XPPRT1.DLL zum testen bekommen, mal sehen, was dabei heraus kommt.
Viele Grüße
Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

Hallo Wolfgang,
super - vielen Dank für die Info :!:
Es gab ja bereits diverse Probleme bezgl. Threads und handles, die nicht mehr freigegeben worden - sind in dem aktuellen SL1 geschlossen worden und läuft ja jetzt auch insgeamt "besser" - aber halt noch nicht perfekt!
Und wenn da jetzt was Neues hochgepoppt ist, kann ich insofern ja beruhigt sein, als dass der Fehler nicht unbedingt bei mir liegt :D

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XB2.NET: Threads werden teilweise nicht freigegeben

Beitrag von Martin Altmann »

So,
noch mal ein kleines Update. Insgesamt lief es jetzt wieder so, wie früher. Ich habe den Dienst nur alle 3-4 Wochen mal restartet - sonst wäre er von alleine gekillt und restartet worden (durch Windows selber: Service not responding... und den entsprechenden Konfigurationseinstellungen für den Dienst, diesen bei einem Fehler zu restarten).
Boris hat in seiner Newsgroup Chris Andries (der dieses "Phänomen" zur Sprache brachte) auf die folgenden Einstellungen hingewiesen, mit denen er spielen solle:

Code: Alles auswählen

oServer:LingerTimeout(60)
oServer:RecvTimeout(30000)
oServer:SendTimeout(30000)
Der erste war mir bereits bekannt und wurde von mir schon genutzt. Die beiden anderen waren mir nicht bewusst und diese habe ich nunmehr ebenfalls eingebaut (wenngleich alle drei mit dem jeweils doppelten Parameterwert). Bisher läuft alles einwandfrei, aber die "Hochlastzeit" ist auch gerade erst vorbei. Mal schauen, wie es sich weiter entwickelt.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten