Serverprozess beendet sich nach 10 Minuten

Halbstark

Grünschnabel
Hallo,

Wir haben eine Java-Server-Applikation, die anderen Rechnern im Netz über RMI Daten liefern soll (Webbrowser -> Apache -> HTML-Seite -> Applet -> Methoden im Serverprozess).
Auf dem Server läuft ein SuSE Linux Enterprise Server 9 mit der Java-Version "1.4.2".

Nach dem Start der Applikation (java ... MyServer) dauert es exakt 10 Minuten, bis der Java-Prozess verschwindet. Wenn innerhalb dieser Zeit jemand auf die Applikation zugreift, wird dieser Timeout ab dem Verbindungsaufbau jeweils um weitere 10 Minuten verlängert, bis der Zugriff beendet wird.

Wir hatten dasselbe Paket von Klassen jahrelang unter HP-UX 10.20 mit
"HP-UX Java C.01.18.05 02/06/2001 15:50:29 jind03" laufen, ohne dass dieser Effekt auftrat.

Auch ein Neu-Generieren der Java-Klassen mit Java SDK 1.4.2 auf einem PC brachte keine Verbesserung.

Die einzige Zeit-Konstante von 10 Minuten (600000 Millisekunden), die ich finden konnte, ist "java.rmi.dgc.leaseValue". Eine Änderung dieser Konstante
(z.B. java -Djava.rmi.dgc.leaseValue=480000 ... MyServer)
brachte jedoch keinen Unterschied, so dass ich davon ausgehe, dass die Ursache an einer anderen Stelle liegt.

Hat jemand eine Idee, wo ich suchen soll? Linux, Java, RMI, ... ?
 
Hallo!

Das kann schon sein, bei der Verwendung von RMI sorgt der (DGC) Distributed Garbage Collector dafür, dass die Remote Referenzen weggeräumt werden, wenn das Objekt nicht mehr von einem Client verwendet wird ODER die Lease Time für das Objekt abläuft...

Provides classes and interface for RMI distributed garbage-collection (DGC). When the RMI server returns an object to its client (caller of the remote method), it tracks the remote object's usage in the client. When there are no more references to the remote object on the client, or if the reference's ``lease'' expires and not renewed, the server garbage-collects the remote object.
http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/package-summary.html

Wenn du eine Referenz zu dem DGC bekommen kannst kannst du mit der ObjectId als Parameter durch den Aufruf der dirty(...) -Methode die Lease erneuern...
Siehe auch:
http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/DGC.html

Ein einfacher Workaround wäre einfach eine Art Ping Methode einzubauen die periodisch eine noop-Methode am RemoteObjekt / Server aufruft.

Gruß Tom
 

Neue Beiträge

Zurück