Hoher Speicherverbrauch wegen MemoryLeak (viele DafDataModel-Instanzen)
Auf der VRZ NRW verbraucht StartStopp im laufe der Zeit immer mehr Speicher. StartStopp wird dort mit -Xmx3000m gestartet, aktuell sind dort die ganzen 3GB an Speicher belegt. StartStopp terminiert dann häufiger mit einer OutOfMemory-Exception oder wird sehr langsam.
Ein HeapDump zeigt, dass StartStopp nur eine ClientDavConnection geöffnet hat, aber 430 Instanzen vom DafDataModel geladen sind (vermutlich aufgrund von Neu-Verbindungen nach Verbindungsabbrüchen zum Datenverteiler?).
Dies wird anscheinend dadurch verursacht, dass StartStopp nur eine einzige Instanz von ClientDavConnection benutzt und unter diesem immer eine neue Verbindung aufbaut. Aus meiner Sicht (als Kernsoftware-Mitentwickler) wäre es vorteilhafter und sauberer, für jeden Verbindungsaufbau eine neue ClientDavConnection zu erzeugen, damit das alte Objekt dann komplett weggeräumt werden kann.
Dieser Fehler kann auf 2 Arten gelöst werden.
a) Indem man hier das Verhalten von StartStopp anpasst (in de.bsvrz.sys.startstopp.process.dav.DavConnector#connectToDav
immer eine neue ClientDavConnection-Instanz erstellen)
b) Indem man die Kernsoftware korrigiert, sodass alte DataModel-Instanzen beim neuen Verbindungsaufbau immer weggeräumt werden (können). Anscheinend ist das Problem ein Listener auf den Verbindungsabbruch, der hier stehen bleibt.
Natürlich könnte man auch beide Änderungen umsetzen, was vermutlich am sinnvollsten wäre.