Agent läuft am Server nur kurze Zeit

  • Hallo zusammen,


    über Weihnachten habe ich endlich meinen Server auf 8.5.2 umgestellt.
    Seither ist es leider so, dass ein Agent, der immer zuverlässig gelaufen ist, nur mehr kurz läuft.
    Und zwar hat dieser Agent bis zu ca. 100.000 Spiegeldokumente aus einem anderem System neu zu berechnen.


    Der Code ist ganz einfach :


    Set db = ns.CurrentDatabase
    Set view = db.GetView("Bestellpositionen")
    Set doc = view.GetFirstDocument
    While (Not doc Is Nothing)
    Call doc.ComputeWithForm(True, False)
    Call doc.Save(True, False, True)
    Set doc = view.GetNextDocument(doc)
    Wend


    Komisch ist : wenn ich einen manuellen Agent baue, der das selbe macht, und diesen am Client starte dann läuft er "ewig" (ich brech ihn halt ab, weil vom Client aus würde es Tage dauern).
    Läuft der Agent am Server (im Hintergrund), dann ist nach gut einer Minute und vielleicht 1000 Dokumenten Schluss.
    Übrigens vertschüsst sich der Agent auch, wenn er am Server auf einem Client manuell gestartet wird.
    Im NAB im Serverdokument gibt es einen Parameter "Agent manager" "Max% busy before delay", der soll aber nur für Server < 4.6 gelten...
    Die Server-CPU (auf der neuen Maschine nur eine derzeit) ist schon ordentlich ausgelastet...


    Danke für Eure Tipps


    Günther

  • Zunächst einmal gehört in jeden Agenten ein adäquates Error Handling.
    Zweitens können wir dir auch nicht sagen, ob und wenn ja, was in deinen Logs zu finden ist.
    Drittens können wir dir ebenfalls nicht sagen, was als maximale Laufzeit für deine Agenten eingestellt ist und wieviele Instanzen des AMgr laufen dürfen.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Sorry, wollte es einfach halten.


    > Error Handling gibt es, es kommt aber kein Error.


    > Max 5 Agents, max 2 Stunden Laufzeit am Server.


    > Ins Log schreibe ich normal nichts, um es nicht zu überfüllen.


    Jetzt kommt der Hammer :
    hab eine Log-Zeile eingefügt :
    ....
    Print "Update Bestellposition : Agent : " + doc.universalID
    Call doc.ComputeWithForm(True, False)
    .....


    und seither läuft der Agent unbeirrt durch.
    Hab halt ein Riesen Logfile....

  • Das isses ja.


    Vor und nach der Schleife hab ich eh schon immer meine Log-Einträge.


    Der Clu ist, dass die Schleife, also mit dem Neuberechnen, nur dann komplett fertig läuft wenn ich außer dem ComputWithForm auch was ins Log schreibe.


    werd jetzt mal versuchen statt des Log-Schreibens irgendeine Turnübung reinzugeben, läuft bhalt der Agent etwas länger aber müllt mir nicht das Log voll.


    Wie gesagt, seit 5 Jahren läuft der Agent klaglos, seit 8.5.2 zickt er.

  • Code
    Call doc.ComputeWithForm(True, False)


    Steht die Zeile wirklich so im Code?
    Weil wie ich vor kurzem gelernt habe, wird ComputeWithForm nicht als call aufgerufen. Die Methode gibt ja true oder false.
    Nicht dass da bei einem Dokument das Dingen gegen die Wand läuft, das aber von deinem Errorhandling - wie sieht das denn aus? - nicht abgefangen wird.

  • Okay, ich habe "call doc.ComputeWithForm" jetzt umgestellt auf
    "success = doc.ComputeWithForm" usw.
    Das Problem bleibt das selbe :
    wenn ich außer "ComputeWithForm" nichts am doc mache, dann vertschüsst sich der Agent nach einer guten Minute.
    Es genügt, wenn ich nur eine Variable aus dem doc auslese (zB : "MyText = doc.universalID"), dann läuft der Agent durch.

  • Warum success=...? Damit erschließt sich auch nicht, was eventuell als Fehler geworfen wird. Wesentlich sinniger wäre
    if not doc.computewithform(true, true) then
    print "Error " & str(err) & ": " & error$
    end if

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Habs jetzt so umgestellt.


    Der Fehler beim Ausstieg des Agent ist :


    AMgr: Agent (MyAgent' in mydatabase.nsf') printing: ComputeWithForm : 0 documents updated


    Allerdings, wenn ich den erwähnten Zugriff auf das Dokument vorher durchführe :


    'MyText = doc.universalID'


    dann läuft der Agent über die gesamte Ansicht fertig.

  • Das passt aber nicht zum Eröffnungspost. Dort redest du noch von ca. 1.000 Dokumenten, jetzt sollen es angeblich gar keine sein.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Ja, scheint so zu sein dass ohne Reinschnüffeln in die Dokumente gar nichts mehr gemacht wird.
    Werd mal sehen, ob ein Upgrade der OnDisk-Struktur, ein NUPDALL und ein NCOMPACT am ganzen Server die Sache geradebiegt. Dazu bin ich nämlich nach dem Update noch nicht gekommen.

  • Das ist eigentlich der komplette Code.
    Der Agent ist auf periodisch eingestellt.
    Wenn ich diesen Code in einen neuen Agent reingebe, der manuell gestartet wird, dann passiert das selbe : ohne aus dem aktuellen Doc was auszulesen wird auch das Doc nnicht neuberechnet.
    Eigentlich glaube ich dass der Agent nicht abschmiert sondern nur blitzschnell fertig wird, weil eben nichts zu tun ist.
    Wie gesagt, kaum lese ich irgendwas aus dem Doc, dann läuft alles wie gewollt.

  • Kann es vielleicht sein, dass Du mit computewithform ein Dokument neu berechnest und das dann aus der Ansicht fliegt und dann mittels getnextdocument, der Focus futsch ist?


    Erklärt zwar nicht, warum der dann manuell gestartet funktioniert und auch funktioniert, wenn du was aus dem Doc "ausliest".

  • Danke für den Hinweis, dieses Problem hatte ich schon mal. In einer Ansicht mit allen "blauen" wurden diese auf "grün" umgefärbt, und waren dann aus der Ansicht verschwunden, bildlich gesprochen.
    Im aktuellen Fall ändert sich aber am Inhalt der Ansicht nichts...

  • Zitat


    Eigentlich glaube ich dass der Agent nicht abschmiert sondern nur blitzschnell fertig wird, weil eben nichts zu tun ist.


    Das kann nicht sein. Etwas zu tun ist ja: das ComputeWithForm. Wenn du in der While-Schleife einen Counter einbaust, siehst du, wieviele Dokumente er tatsächlich anpackt.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl