Tuesday, January 12, 2010

Pooling is your friend

Been trouble shooting performance issue on a client's server for some time now. The problem was that under heavy load, the jvm would eventually run out of heap, or the database connections ran out. I tried various JVM settings to see if i can force garbage collection to occur more frequently, but all to the same result. Our LiveCycle server wasn't able to sustain the load and dies.

Turns out that this was easily fixable by setting the pooling settings for the services inside of adminui. By setting to use pooled instances only, and a minimum and maximum pool size, we got a much more stable environment. Consequently, the garbage collection also occurred much more frequently. Under load, the LiveCycle Server didn't run out of heap space either!

To modify pooling for a service:

1. Login to admin ui
2. Click on services
3. Select application and services
4. Select service management
5. Find the process / service that you created
6. Click on pooling. update as follows

- Use pooled instance for all requests
- Initial service instance pool size set to average number of concurrent transactions expected.
- max service instance pool size set to maximum number of concurrent transactions expected
- maximum async service instance is set to 0
- invocation wait time out is set to 0.

This setting worked so far for us. I will update the blog if that's not the case.