I have noticed a memory leak in my JBoss Minerva pool and am
wondering if there is a known fix or work around. I have checked the manual,
the forum, and the newsgroups with little luck. Let me give you the
specifics:

        I am running on Solaris8 on x86, JBoss-2.4.1 and Tomcat-3.2.3. I
have a pool with the following configuration in my jboss.jcml


  <mbean code="org.jboss.resource.ConnectionFactoryLoader"
 
name="JCA:service=ConnectionFactoryLoader,name=minerva_jdbc_matrix">
    <attribute name="FactoryName">minerva_jdbc_matrix</attribute>
    <attribute name="RARDeployerName">JCA:service=RARDeployer</attribute>
    <attribute name="ResourceAdapterName">
      Minerva JDBC LocalTransaction ResourceAdapter
    </attribute>
    <attribute name="Properties">
      ConnectionURL=jdbc:HypersonicSQL:hsql://localhost:9019
    </attribute>

    <attribute name="ConnectionManagerFactoryName">
      MinervaSharedLocalCMFactory
    </attribute>

    <attribute name="ConnectionManagerProperties">
      # Pool type - uncomment to force, otherwise it is the default
      #PoolConfiguration=per-factory

      # Connection pooling properties - see
      # org.jboss.pool.PoolParameters
      MinSize=0
      MaxSize=50
      Blocking=true
      GCEnabled=true
      IdleTimeoutEnabled=true
      InvalidateOnError=true
      TrackLastUsed=false
      GCIntervalMillis=120000
      GCMinIdleMillis=120000
      IdleTimeoutMillis=120000
      MaxIdleTimeoutPercent=1.0
    </attribute>


    <attribute name="PrincipalMappingClass">
      org.jboss.resource.security.ManyToOnePrincipalMapping
    </attribute>
    <attribute name="PrincipalMappingProperties">
      userName=sa
      password=
      TransactionIsolation=TRANSACTION_READ_COMMITED
    </attribute>
  </mbean>

        I have a stateless session bean which contains the code snippet:

        try {
            InitialContext ic = new InitialContext();
            DataSource ds = (DataSource)
ic.lookup("java:/minerva_jdbc_matrix");
            Connection con = ds.getConnection();
            con.close();
        } catch (Exception e) {
        }

        I didn't include the con.close() in a finally, since the only way a
connection could be opened is by ds.getConnection() working, which means
that it would always get to con.close() if a connection had opened.

        I hit this bean with a client that runs 250 concurrent request. I
notice that in about 5-8 hrs, the memory of the Java process crawls from
about 70M to 120M at which point it will starts to throw OutOfMemory errors
and I can never get a connection the database again. If I turn off the
client, and let the box's CPU get down to about 99% idle, the memory never
clears up. I am forced to restart my server.

        I have tried this with two different databases and jdbc drivers
(hsql and ms sql) and have gotten similar results, so I don't think it is a
bug in the drivers. 

        Am I using the pools incorrectly? Is that a pool configuration
parameter that I should try?

        Thanks in advance for any help or clues,
        Lucas McGregor, NovaLogic
        

_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to