WM webSerivices


We are currently in the process of developing a webService on webMethods IS which will be used by a lot of client (300 + Concurrent connections). I have created the service and tried heard to make it as optimal as possible. Create a WSDL and created a .Net client to use the WSDL. Tried with 1 client invocation the process time (200 ms) is exception and well below the SLA (2 secs). But when I put this through a load generator (JMeter) with 50 threads it started chocking, the response time climbed up to (15 secs). the response time graph is directly proportional to the number of concurrent threads. When I turned off the session logging the perfomance was much better (2.5 secs) but still not meeting my SLA. We are planning to cluster the IS instances with a hardware load balancer but I want to know if there is any thing else I could do better to improve the performance. Especially I want to see how we can use GLUE or Service Net in this kind of senarios.

Any help or a direction is much appreciated.

Ram Challuri


Are you using soap-rpc or soap-message? With either there is a certain amount of overhead that is involved to convert from XML on the wire to IData used to invoke your service.

To measure the overhead, you could create a service that does nothing or perhaps writes a single debugLog message, but that accepts the same parameters as your current service. Running your jMeter tests with this stubbed out service will allow you to measure overhead.

If you are using soap-rpc, the main overhead will likely be in the unmarshalling from XML to IData and the invocation of your service. You could measure the impact of the unmarshalling by writing a test driver that builds an IData and invokes your service using the Java API. The only overhead in this scenario is setting up the connection (you can have your test driver reuse the connection to filter this out) and invoking the service.

Optimize your service using the java API test driver, when you’ve got is as fast as possible there, look for ways to use multiple threads to perform some of your service’s work in parallel.