Agent Manager lügt mich an !

  • Hi zusammen,


    ich habe ein merkwürdiges Phänomen:


    Nach Migration eines Domino-Servers auf eine andere Hardware zeigt ein Java-Agent sehr merkwürdiges Verhalten:


    Der Agent soll Datensätze aus einer Notes-Datenbank in eine MySQL-Datenbank schreiben.
    Er läuft auch los, doch immer nach dem 201 Dokument stellt er kommentarlos die Arbeit ein. Das ganze auf unterschiedlichen Dokumenten und mit unterschiedlichen DBen, ein defektes Dokument scheidet als Auslöser somit aus.


    Aber es kommt noch besser:
    Der AgentManager läuft auf dem Server mit drei Instanzen und alle 3 executives zeigen sich nach dem Abbruch im TaskMonitor als "idle", ebenso die Haupttask. Man könnte also meinen, der Agent hätte sich "sauber" beendet.
    Dem ist aber nicht so ! Schaue ich mir die Prozesse mittels top auf OS-Ebene an, sehe ich, dass der Agent Manager noch läuft und dabei auch noch mal eben die CPU mit 97% auslastet.
    Neustart des Servers resultiert in Hänger, ich muss dann die Tasks killen.


    Das ganze passiert unter Domino 6.5.5 auf SLES9. Vorher lief der Server mit Domino 6.5.2 ebenfalls auf SLES9, allerdings jetzt virtualisiert in einer VMWare ESX.


    Wir haben den Agenten schonmal komplett debuggt und neu kompiliert. Ausführungsrechte können es auch nicht sein, sonst würde er ja nicht die ersten 200 Dokumente abarbeiten.


    Hat jemand irgendeine Idee ? :-?


    Vielen Dank für jegliche Anregungen !


    Gruß


    Ozzy

  • Java agenten haben unter umständen ein speicher verwaltungs problem, welches in diesen richtung deuten kann.. Dafür mußte mann genau wissen was der agent macht (=code).


    Ronka

  • Hallo Rudi,


    ich kann Dir den Code gerne mal rüberschicken, falls Du Zeit und Lust hast, mal reinzuschauen.


    Ich selbst bin leider nicht gerade fit in Java, der Code ist daher auch nicht von mir.


    Gruß


    Ozzy

  • Wenn ich das richtig sehe generiert der eine If Zweig immer wieder neue Verbindungen zur MySQL Datenbank und irgendwann wird da wohl einfach Schluss sein.
    Ich kann nirgendwo sehen, daß die MySQL Verbindung auch wieder abgebaut wird.


    Java technisch heisst das einfach, daß die Verbindungen erst wenn der Garbage Collector läuft wieder abgebaut werden. Und wann das ist weiss man leider aufgrund der Java Architektur nicht wirklich.


    Vermutlich dürfte die Last des Agent Managers nach einiger zeit in der der Agent nicht mehr lief wieder runtergehen.

  • Hallo taurec,


    erst mal danke für's Code-Sichten !


    Meinst Du diesen If-Zweig ?



    Falls Du diesen meinst: Dieser If-Zweig dürfte eigentlich nur einmal zutreffen.
    Die DB enthält genau ein SQL-Konfigurationsdokument und ca. 20 Datenbankdokumente, die schlicht den Pfad zu einzelnen Notes-Statistik-Datenbanken enthalten, sowie die Ansicht, die für den Datenimport herangezogen werden soll.


    Es wird also erst das SQL-Verbindungsdokument eingelesen, die Verbindung aufgebaut, danach werden die Datenbankdokumente abgearbeitet.


    Ziel ist, die Statisitikdaten verschiedener Dienststellen in einer SQL-DB zu akkumulieren. Was ja auch bis vor kurzem gut geklappt hat ...


    Erstaunlich ist übrigens auch, dass der Agent funktioniert, wenn er auf einem Client lokal läuft.


    Gruß


    Ozzy

  • Hi Taurec,


    der Agent läuft werktags frühmorgens, nachdem die einzelnen Statistikdatenbanken von den Aussenstellen auf den Hub repliziert wurden.


    Der Agent steigt immer nach dem 200 Dokument aus, egal welches Dokument das ist. Wenn ich z.B. testweise die Reihenfolge der Datenbank-Konfigurationsdokumente ändere, so dass eine andere Datenbank als erste "abgearbeitet" wird, bleibt der Fehler gleich.


    Die letzte Konsolenmeldung war mal "vor For loop" und mal "nach for loop". Beide Meldungen werden von der Methode pumpDatabase der Klasse Pump generiert, und zwar unmittelbar vor bzw. unmittelbar nach der for-Schleife, welche sämtliche Felder in dem SQL-Insert/Update-Statement auf NULL setzt. Im Anschluss an diese for-Schleife werden dann die tatsächlichen Werte aus den Feldern des Notes-Dokumentes in das SQL-Statement eingetragen. Anschließend würde die Meldung "iterator endet" auf die Konsole geschrieben. Diese Meldung erscheint bei dem "Ausstiegs"-Dokument nicht mehr.


    Gruß & Frohes neues Jahr



    Ozzy

  • Dann würde ich mal prüfen ob er da irgendwo auf einen Fehler läuft bzw die Debugging Ausgaben aktivieren.


    Was mir auch noch etwas seltsam vorkommt ist die Art des Recyclings.
    Es wird das Objekt recycelt bevor damit etwas getan wird und nicht danach.
    Das könnte ebenfalls eine Ursache sein