Relevant system configuration:
Websphere 6.1.0.17 – 4 nodes in a cluster/ but only running 1 active node DB2 V9.5 Hibernate 3 for persistence layer.; second level cacheing is disabled. Spring framework for transactionality and MVC for presentation layer. IBM_HTTP_Server/6.1 Apache/2.0.47 IBM WebSphere MQ 7.0.0.1 IBM WebSphere MQ Broker v6.1
Background:
We have 4 schemas created in our database for which we have created a Session Factory wrapper and in our wrapper we configure a factory per database to handle DB transactions. In our current traffic models we queue the majority of our transactions to a common DB and one additional customer specific DB. Our current traffic levels are minimal.
Our session factory wrapper is a subclass of org.Hibernate.SessionFactory. Each factory is created only once at startup and stored into a hashmap (Collections.synchronizeMap). We use HibernateTransactionManager to bind and manage our sessions and invoke TransactionSynchronizationManager bindResource when a session is obtained and unbindResource when a session is no longer needed. Our HashMap inherits from LRUMap and SoftLimitMRUCache.
The problem:
After several days of relatively low traffic to our DBs, we get a java/lang/OutOfMemoryError with a “Forcing J9AllocateIndexableObject() to fail due to excessive GC” and the heap is exhausted. After analysis of the dumps, we discover that a suspect of memory leak is the SessionFactory Object which we have created (notice we have subclassed from Hibernate Session Factory.
We were running with 512 heap size for min/max on the JVM. We increased this to 1024 and had the problem occur again shortly thereafter..
What are some of the possibilities that would be root cause in causing this issue? What other tools/configuration can we use to diagnose this better?
Thanks very much Bill
|