The JVM is an older one, Sun’s 1.3.1 with no patches, we are still on 6.0.1 sp2. We are upgrading webMethods to 6.5 early next year. I haven’t really ruled out anything as a possibility at this point. I have been focused on the JVM just because of the perceived pause in processing that occurs.
The pause times on the minor collections stay pretty consistent even during the bad performance. It is really weird. The actual integration works like this:
1- Every 3 minutes 1500 records are inserted into an Oracle table that we have a JDBC notification on.
2-They get picked up by a trigger and the first flow service which does some mapping into a common format and then published again.
3- The next trigger puts them into a MQ queue on another server.
4- An MQ Listener picks up the response from the mq server, does some formatting and then publishes back to the broker.
5 -Another trigger picks up the messages and invokes a mainframe transaction and updates an oracle database. End of integration.
On the first insertion of 1500, total processing time is just over 1 minute to complete the entire process. 2nd insertion about the same. 3rd it goes to about two minutes, then on the 4th it does not get finished prior to the next insertion. At that point it never catches up. The cpu utilization to about 50 - 60% during the 1st and 2nd iterations and then drops to 30 -45% during the 3rd and 4th when it is having problems.
The reason I believe the performance problem is isolated to the Integration Server and not any of the other resources is when the performance issue occurs the very first flow service that processes the inbound documents slows down significantly. Where it normally drains the 1500 from the queue in less than a minute, it now takes over 3. That flow service is not dependent on any external resource.
As far as command line args to the jvm. I’m using Bound Threads since I’m running on Solaris which generally gives better performance.
JAVA_MEMSET=“-server -ms${JAVA_MIN_MEM} -mx${JAVA_MAX_MEM} -native -XX:-UseBoundThreads -XX:-UseLWPSynchronization -XX:+UseThreadPriorities”
I like the idea of changing the JVM version and even the vendor. That might help isolate. Plus 1.4.2 has some improvements in GC options. I guess after that I can “unplug” individual flow services and see if there is an individual service or external resource that could be causing the issue. Since all of the flow services are decoupled from each other, I’m hoping we can find if one is the offender or its not the flow services at all.
The JVM guru is me, which isn’t saying a whole lot. . Sun maybe an option although they probably won’t provide support for the end of life JVM version we are using.
markg
http://darth.homelinux.net
#webMethods#Flow-and-Java-services#Integration-Server-and-ESB