JMS Performance Problem

Hallo,
ok ich habe gestern und heute so einiges Ausprobiert und hier ist mein Zwischenstand. Und ich kann schon vorweg sagen, ich bin noch nicht zufrieden.
Folgende Änderungen haben deutliche Performenceverbesserungen gebracht:
- Zuerst habe ich die Datei .../deploy/jms/postgres-jdbc2-service.xml durch die Datei null-persistence-service.xml ersetzt.
- Dann habe ich in der Datei jbossmq-service.xml folgende Eintrag hinzugefügt
<mbean code="org.jboss.mq.server.jmx.InterceptorLoader" name="jboss.mq:service=NonPersistent">
<attribute name="InterceptorClass">org.jboss.mq.server.NonPersistentInterceptor</attribute>
<depends optional-attribute-name="NextInterceptor">jboss.mq:service=DestinationManager</depends>
</mbean>
Natürlich habe ich im Eintrag vorher bei NextInterceptor auf diesen verwiesen.
Diese Einstellungen haben bewirkt, dass das gesamte Messaging schneller geworden ist.
Leider gibt es immer noch Ausreißer. Ich habe die Vermutung, dass a. der GC damit was zu tun hat und b. vielleicht sogar auch das Netzwerk. Also versuche ich den JBoss in sachen GC noch etwas zu tunen. Wenn ich hierfür auch noch Tipps bekommen, bzw. gibt es noch möglichkeiten am JMS rumzuprobieren.
 
Hallo,

bleiben die Messages immer noch zu lange in der Queue oder dauert das Senden / Empfangen so lange? Was ist der Inhalt der Messages? Einfache Strings (TextMessage) oder komplexe Objektgraphen (ObjectMessage)?

Gruß Tom
 
Hallo,
ja einige Messages bleiben immer noch zu lange in der Queue. Ich habe wieder einen Test gemacht. Ich habe das Teil ziemlich genau 1 Stunde laufen lassen. Nach dieser Zeit hatte ich ca. 12000 Messages, davan haben ca. 60 über 500ms gebraucht. Wie gesagt die Zeit wurde gemessen an dem Punkt an dem der Sender die send Methode aufgerufen hat und dann wieder wenn die onMessage vom Empfänger aufgerufen wurde. Es werden nur ObjectMessages versendet. So langsam weiß ich nicht mehr wo ich noch was drehen kann.
Gruß Timo
 
Hast du mal nachgeschaut, wie groß die Objektbäume sind, die du da über die Leitung schickst? Werden die evtl. besonders groß bei den Nachrichten, die so lang dauern?
 
Hallo,

ObjectMessages sind IMHO in den meisten Fällen nicht nötig und aufwendig (Serialisierung). Versuch doch mal deine Objekte in einfache TextMessages zu zerlegen, zu verschicken und beim Empfänger wieder entsprechend zusammenzubauen. Damit hab ich schon performanceboosts um den Faktor 10 erlebt. Außerdem würd ich hier mal mit -verbose:gc die GC Timestamps ausgeben lassen. Wäre interessant zu wissen, ob die Messages lange in der Queue bleiben wenn gerade ne GC läuft ... das kann man tunen.

Gruß Tom
 
Das mit den Textmessages ist eine gute Idee. Das werde ich mal ausprobieren. Allerdings bedeutet das etwas Aufwand für mich. Ich muss da ein paar Änderungen an meinem TCP Service und an meinen Dispatchern machen. Und das mit den GC Timestamps werde ich mir auch mal ansehen. Guter Tipp. Allerdings bin ich jetzt erst mal zwei Wochen in Urlaub. Also wenn Du jetzt mal nix hier liest heißt das nicht, dass ich da nicht mehr dran bin.
Gruß Timo
 
Hallo, ich melde mich endlich aus meinem Babyurlaub zurück. Ich war in der Zeit auch nicht untätig. Ich habe jetzt die Objectmessage in Textmessages umgebaut. Außerdem habe ich mit verbose:gc den GC mitgelogt. Und jetzt wird es kniffelig. Meine Auswertung zeigt immer noch genau die gleichen Merkmale wie vorher. D.h. das Umbauen von Objectmessages auf Textmessages hat nichts gebracht. Und auch der GC zeigt nicht ungewöhnliches. Der GC braucht durchschnittlich unter 0,05 sek. Mir ist allerdings ein in den Logausgaben vom JBoss aufgefallen. Es gibt da z.B. in der Zeit in der eine Message mal 1,3 sek. gebraucht hat beim JBoss ein Loch von 500ms in denen gar nix passiert ist.
Vielleicht habe ich an der falschen Stelle gesucht.
 
Zurück