2012-04-09 4 views
0

Wir starten Prozesse in großen Mengen (sagen wir 100 Instanzen) in JBPM5 gleichzeitig. Und jede Aufgabe des Prozesses wird von externen Programmen asynchron gestartet und abgeschlossen. In diesem Szenario benötigt die JBPM-Engine viel Zeit, um die nächste Aufgabe zu generieren, wodurch die Gesamtleistung beeinträchtigt wird. (ZB: Es dauert im Durchschnitt 45 Minuten, um 100 Prozessinstanzen abzuschließen.) Bitte schlagen Sie eine Möglichkeit vor, die Leistung der jbpm5-Engine zu optimieren.Optimierung der Leistung der JBPM5-Engine

Antwort

0

Jetzt ist es schneller. Nach Abschluss der Aufgabe von

client.complete() 

ich bin andeutend/Signalisierung der Server den Befehl

ksession.getWorkItemManager().completeWorkItem(id, data); 

mit diesem dem Motor unter Verwendung erzeugt die nachfolgenden Aufgaben schneller und ich in der Lage könnte es für meine Verarbeitung abrufen . Aber ist dies der ideale Weg, um Aufgaben zu erledigen ..?

0

Etwas muss falsch oder falsch konfiguriert sein, da 45 Minuten zum Abschluss von 100 Prozessinstanzen viel zu viel erscheinen, sollte jede Anforderung im Normalfall deutlich weniger als eine Sekunde dauern. Aber es ist schwer herauszufinden, was falsch ist. Haben Sie mehr Informationen zu Ihrer Einrichtung und was kostet eigentlich viel Zeit? Welche Arten von externen Diensten rufen Sie an? Haben Sie einen Prototyp zur Verfügung, den wir uns anschauen könnten?

Kris

+0

Der Beispielworkflow enthält 8 menschliche Aufgaben und der Krieg wird in jboss Server- und Daemon-Threads im Hintergrund ausgeführt. Beim Start von 100 Prozessen startet der Thread alle reservierten Aufgaben und ein anderer Thread beendet die Inprogress-Aufgaben. Der Start und die Fertigstellung der ersten Aufgabe aller Prozesse ist schneller, aber die Erzeugung späterer Aufgaben ist langsamer und benötigt viel Zeit. –

+0

Jetzt ist es schneller. Nach Abschluss der Aufgabe von client.complete() Ich bin/signalisieren den Server mit ksession.getWorkItemManager(). CompleteWorkItem (ID, Daten); mit diesem erzeugt die Engine die nachfolgenden Aufgaben schneller und ich konnte es für meine Verarbeitung abrufen. Aber ist dies der ideale Weg, um Aufgaben zu erledigen? –

0

Ja, das klingt, als Problem in Ihrer Domäne, und nicht in Ihrem Motor. Vor einiger Zeit haben wir einige Performance-Tests für Speicherprozesse und für DB-persistente Prozesse durchgeführt und die von der Engine eingeführte Latenz betrug weniger als 2 ms pro Aktivität (im Speicher) und 5 ms pro Aktivität (in der Datenbank beibehalten). Wie genau nennen Sie die Engine, wie hosten Sie sie? Was für Anrufe machst du? Haben Sie eine Möglichkeit zu messen, wie viel Zeit Ihre externen Dienste benötigen, um zu antworten?

Prost

+0

Wir testen mit mysql db und jboss server. –

+0

Threads, die im Hintergrund laufen, starten und vervollständigen die Aufgaben jedes Prozesses. In der mysql db haben wir erlebt, dass nach 100 abgeschlossenen Aufgaben die neue Taskgenerierung Zeit braucht und wir vermuten, dass die Engine langsam ist. –

+0

Es sollte nicht. Was meinst du mit Threads, die in den Rücken laufen? Menschen sollen diese menschlichen Aufgaben richtig machen? Was machen diese Threads? Sehen Sie sich die SQL-Logs an, um zu sehen, was passiert. Wahrscheinlich töten Sie die Datenbank, indem Sie Tonnen von Abfragen mit diesen Hintergrundthreads senden. – salaboy