users@glassfish.java.net

performance problems caused by RWLockDataStructure.getResource(...)

From: <forums_at_java.net>
Date: Tue, 23 Aug 2011 03:01:13 -0500 (CDT)

Hello,
under load we observed some performance problems caused by threads stopped by
RWLockDataStructure.getResource.
Our connection pool is tuned for performance (init capacity = max capacity,
we don't use the XA driver, custom connection validator is doing a pretty
simple query).
We are using the latest Oracle JDBC thin driver.
Here an example for such a waiting thread:
"http-thread-pool-51001(5)" daemon prio=10 tid=0x00002aaacf0e5800 nid=0x3d6
waiting on condition [0x0000000047197000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x000000045dc39d58> (a
java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
        at
java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:941)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1261)
        at
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:594)
        at
com.sun.enterprise.resource.pool.datastructure.RWLockDataStructure.getResource(RWLockDataStructure.java:116)
        at
com.sun.enterprise.resource.pool.ConnectionPool.getResourceFromPool(ConnectionPool.java:716)
        at
com.sun.enterprise.resource.pool.ConnectionPool.getUnenlistedResource(ConnectionPool.java:632)
        at
com.sun.enterprise.resource.pool.ConnectionPool.internalGetResource(ConnectionPool.java:526)
        at
com.sun.enterprise.resource.pool.ConnectionPool.getResource(ConnectionPool.java:381)
        at
com.sun.enterprise.resource.pool.PoolManagerImpl.getResourceFromPool(PoolManagerImpl.java:259)
        at
com.sun.enterprise.resource.pool.PoolManagerImpl.getResource(PoolManagerImpl.java:178)
        at
com.sun.enterprise.connectors.ConnectionManagerImpl.getResource(ConnectionManagerImpl.java:341)
        at
com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:304)
        at
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:190)
        at
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:165)
        at
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:160)
        at
com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:110)
...
Do you have any hints how to improve the performance/scalability and avoid
the mentioned locks?
GF 3.1 build 43, 1.6.0_24 64bit, Multi-Core Linux machines
thanks in advance for any hints,
makiey
 


--
[Message sent by forum member 'makiey']
View Post: http://forums.java.net/node/836233