Viewing dump files for resource pools
- Pool resources are exhausted
- A potential leaked resource is detected
- A previously potentially leaked resource is returned to the pool
Pool resources are exhausted
The following example shows the contents of a dump file that was generated when pool resources were exhausted for a database connection.
2016-12-10 11:05:12,680 WARN [nexj.diagnostic.core.rpc.pool.PoolManager] Automatic pool dump:
RelationalDatabaseConnectionPool@159749931(fragment=RelationalDatabaseFragment ObjectQueueDatabase.[default], busyTimeout=10000, idleTimeout=60000, maxSize=33, activeCount=3, idleCount=0)
Active:
SQLConnection@620363089(lastUse=10013ms, refCount=1, xaResource=SQLConnection$XAResourceWrapper@883133689(xaResource=JtdsXAResource@1568426606))
DiagnosticTraceFactory$DiagnosticTraceHolder@184200117(threadName=NexJ Worker #2, transaction=GenericTransaction@2096453709(status="Active", id=Tx(0700000000000000C805BE154AFB35F5538D633BD1D81B4D)))
scriptStack:
at Object.read(attributes,where,orderBy,count,offset,xlock)$beginTransactionIfXLock
(class:Object.read(attributes,where,orderBy,count,offset,xlock)
$beginTransactionIfXLock:6)
at server.read-instance(syslibrary:server:975)
at SysObjectQueueDispatcher.getDispatcher(locked)$main
(class:SysObjectQueueDispatcher.getDispatcher(locked)$main:5)
systemStack:
at nexj.core.rpc.pool.DiagnosticTraceFactory.createTrace(DiagnosticTraceFactory.java:73)
at nexj.core.util.pool.resource.GenericResourcePool.get(GenericResourcePool.java:226)
at nexj.core.rpc.sql.RelationalDatabaseConnectionPool
.getConnection(RelationalDatabaseConnectionPool.java:160)
at nexj.core.persistence.sql.SQLAdapter.open(SQLAdapter.java:945)
at nexj.core.persistence.sql.SQLAdapter.getConnection(SQLAdapter.java:892)
at nexj.core.persistence.sql.SQLCursor.query(SQLCursor.java:158)
at nexj.core.persistence.GenericCursor.run(GenericCursor.java:484)
at nexj.core.persistence.GenericCursor.init(GenericCursor.java:274)
at nexj.core.persistence.GenericCursor.<init>(GenericCursor.java:189)
at nexj.core.persistence.sql.SQLCursor.<init>(SQLCursor.java:78)
at nexj.core.persistence.sql.SQLAdapter.openCursor(SQLAdapter.java:1218)
at nexj.core.persistence.GenericPersistenceAdapter.read
(GenericPersistenceAdapter.java:82)
at nexj.core.persistence.Query.read(Query.java:6000)
at nexj.core.runtime.sys.SysObject.read(SysObject.java:53)
at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at nexj.core.scripting.JavaAction.invoke(JavaAction.java:67)
at nexj.core.scripting.Machine.run(Machine.java:2121)
at nexj.core.scripting.Machine.invoke(Machine.java:639)
at nexj.core.meta.Event.invoke(Event.java:1617)
at nexj.core.meta.Metaclass.invoke(Metaclass.java:4110)
at nexj.core.rpc.queueing.ObjectQueueDispatcher$DispatchStrategy.run(ObjectQueueDispatcher.java:2634)
at nexj.core.integration.ContextReceiver$1.run(ContextReceiver.java:123)
at nexj.core.runtime.InvocationContext.run(InvocationContext.java:3016)
at nexj.core.integration.ContextReceiver.run(ContextReceiver.java:84)
at nexj.core.rpc.queueing.ObjectQueueDispatcher.dispatch(ObjectQueueDispatcher.java:1137)
at nexj.core.rpc.queueing.ObjectQueueDispatcher.onMessage(ObjectQueueDispatcher.java:635)
at nexj.core.rpc.queueing.ObjectQueueDispatcher.onMessage(ObjectQueueDispatcher.java:578)
at nexj.core.rpc.queueing.ObjectReceiver.onMessage(ObjectReceiver.java:108)
at nexj.core.rpc.queueing.ObjectQueueServerMDB.onMessage(ObjectQueueServerMDB.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at nexj.core.container.platform.teee.ejb.GenericMDBContainer.invoke
(GenericMDBContainer.java:112)
at nexj.core.container.platform.teee.ejb.MDBMessageEndpointFactory$ProxyHandler.invoke(MDBMessageEndpointFactory.java:286)
at com.sun.proxy.$Proxy5.onMessage(Unknown Source)
at nexj.core.rpc.queueing.ra.ObjectConsumerPool.invokeLocalDispatcher
(ObjectConsumerPool.java:454)
at nexj.core.rpc.queueing.ra.ObjectConsumerPool$DispatcherState.processMessages(ObjectConsumerPool.java:1211)
at nexj.core.rpc.queueing.ra.ObjectConsumerPool$DispatcherState.listen(ObjectConsumerPool.java:1680)
at nexj.core.rpc.queueing.ra.ObjectConsumerPool.listen(ObjectConsumerPool.java:191)
at nexj.core.rpc.ra.GenericConsumerPool.run(GenericConsumerPool.java:287)
at nexj.core.rpc.queueing.ra.ObjectConsumerPool.run(ObjectConsumerPool.java:421)
at nexj.core.container.platform.teee.ra.RAWorkManager$CheckedWork.run(RAWorkManager.java:154)
at nexj.core.container.platform.teee.work.GenericWorkerPool$Worker.run(GenericWorkerPool.java:326)
The following example shows the stacktrace that accompanies the pool dump file.
(err.persistence.unavailable)
and
(err.pool.resource.busy)
.2016-12-10 11:05:13,701 ERROR [nexj.core.rpc.cluster.ClusterManager] Error in heartbeat
nexj.core.persistence.AvailabilityException: Data source "DefaultRelationalDatabase" is temporarily unavailable. (err.persistence.unavailable)
at nexj.core.persistence.sql.SQLAdapter.getConnection(SQLAdapter.java:896)
at nexj.core.persistence.sql.SQLCursor.query(SQLCursor.java:158)
at nexj.core.persistence.GenericCursor.run(GenericCursor.java:484)
at nexj.core.persistence.GenericCursor.init(GenericCursor.java:274)
at nexj.core.persistence.GenericCursor.<init>(GenericCursor.java:189)
at nexj.core.persistence.sql.SQLCursor.<init>(SQLCursor.java:78)
at nexj.core.persistence.sql.SQLAdapter.openCursor(SQLAdapter.java:1218)
at nexj.core.persistence.GenericPersistenceAdapter.read
(GenericPersistenceAdapter.java:82)
at nexj.core.persistence.Query.read(Query.java:6000)
at nexj.core.rpc.cluster.ClusterManager.persist(ClusterManager.java:1277)
at nexj.core.rpc.cluster.ClusterManager.heartbeat(ClusterManager.java:1391)
at nexj.core.rpc.cluster.ClusterManager.timeout(ClusterManager.java:1456)
at nexj.core.rpc.timer.PersistentTimer.process(PersistentTimer.java:479)
at nexj.core.rpc.pool.GenericConsumerAdapter.process(GenericConsumerAdapter.java:157)
at nexj.core.rpc.pool.DefaultConsumerAdapter.process(DefaultConsumerAdapter.java:22)
at nexj.core.util.pool.consumer.GenericConsumer.process(GenericConsumer.java:303)
at nexj.core.util.pool.consumer.GenericConsumer.consume(GenericConsumer.java:283)
at nexj.core.rpc.timer.TimerConsumer.consume(TimerConsumer.java:66)
at nexj.core.util.pool.consumer.GenericConsumer.run(GenericConsumer.java:200)
at nexj.core.rpc.pool.ThreadPool$Worker$1$1.run(ThreadPool.java:244)
Caused by: nexj.core.util.pool.resource.PoolBusyException: Unable to allocate a resource in 10,000 ms due to reaching the maximum pool size of 33. (err.pool.resource.busy)
at nexj.core.util.pool.resource.GenericResourcePool.get(GenericResourcePool.java:270)
at nexj.core.rpc.sql.RelationalDatabaseConnectionPool.getConnection
(RelationalDatabaseConnectionPool.java:160)
at nexj.core.persistence.sql.SQLAdapter.open(SQLAdapter.java:945)
at nexj.core.persistence.sql.SQLAdapter.getConnection(SQLAdapter.java:892)
... 19 more
Potential leaked resource is detected
The following example shows the contents of a dump file that was generated when a potential leaked resource was detected for a database connection.
2016-12-10 11:20:29,625 INFO [nexj.diagnostic.core.rpc.pool.PoolManager] Pool dump: The following resource(s) have been in use for more than 86400 s
RelationalDatabaseConnectionPool@2112392140(fragment=RelationalDatabaseFragment DefaultRelationalDatabase.[default], busyTimeout=10000, idleTimeout=60000, maxSize=33, activeCount=1, idleCount=2)
Active:
SQLConnection@1250839995(lastUse=1000ms, refCount=1)
DiagnosticTraceFactory$DiagnosticTraceHolder@256757984(threadName=NexJ TimerConsumer@1614732944(pool=TimerConsumerPool@210363069(config=Timer SystemTimer)) #342650404)
systemStack:
at nexj.core.rpc.pool.DiagnosticTraceFactory.createTrace(DiagnosticTraceFactory.java:73)
at nexj.core.util.pool.resource.GenericResourcePool.get(GenericResourcePool.java:226)
at nexj.core.rpc.sql.RelationalDatabaseConnectionPool.getConnection
(RelationalDatabaseConnectionPool.java:160)
at nexj.core.persistence.sql.SQLAdapter.open(SQLAdapter.java:945)
at nexj.core.persistence.sql.SQLAdapter.getConnection(SQLAdapter.java:892)
at nexj.core.persistence.sql.SQLCursor.query(SQLCursor.java:158)
at nexj.core.persistence.GenericCursor.run(GenericCursor.java:484)
at nexj.core.persistence.GenericCursor.init(GenericCursor.java:274)
at nexj.core.persistence.GenericCursor.<init>(GenericCursor.java:189)
at nexj.core.persistence.sql.SQLCursor.<init>(SQLCursor.java:78)
at nexj.core.persistence.sql.SQLAdapter.openCursor(SQLAdapter.java:1218)
at nexj.core.persistence.GenericPersistenceAdapter.read
(GenericPersistenceAdapter.java:82)
at nexj.core.persistence.Query.read(Query.java:6000)
at nexj.core.rpc.cluster.ClusterManager.persist(ClusterManager.java:1277)
at nexj.core.rpc.cluster.ClusterManager.heartbeat(ClusterManager.java:1391)
at nexj.core.rpc.cluster.ClusterManager.timeout(ClusterManager.java:1456)
at nexj.core.rpc.timer.PersistentTimer.process(PersistentTimer.java:479)
at nexj.core.rpc.pool.GenericConsumerAdapter.process(GenericConsumerAdapter.java:157)
at nexj.core.rpc.pool.DefaultConsumerAdapter.process(DefaultConsumerAdapter.java:22)
at nexj.core.util.pool.consumer.GenericConsumer.process(GenericConsumer.java:303)
at nexj.core.util.pool.consumer.GenericConsumer.consume(GenericConsumer.java:283)
at nexj.core.rpc.timer.TimerConsumer.consume(TimerConsumer.java:66)
at nexj.core.util.pool.consumer.GenericConsumer.run(GenericConsumer.java:200)
at nexj.core.rpc.pool.ThreadPool$Worker$1$1.run(ThreadPool.java:244)
The following example shows the contents of a dump file that was generated when a potential leaked resource was detected for a timer.
2016-12-10 11:20:29,626 INFO [nexj.diagnostic.core.rpc.pool.PoolManager] Pool dump: The following resource(s) have been in use for more than 86400 s
TimerConsumerPool@210363069(config=Timer SystemTimer, idleTimeout=60000, maxSize=-1, activeCount=4, idleCount=4)
Active:
TimerConsumer@1689510533(lastUse=9905ms)
DiagnosticTraceFactory$DiagnosticTraceHolder@982345134(threadName=NexJ TimerConsumerPool@210363069(config=Timer SystemTimer) #243642492)
systemStack:
at nexj.core.rpc.pool.DiagnosticTraceFactory.createTrace(DiagnosticTraceFactory.java:73)
at nexj.core.util.pool.consumer.GenericConsumerPool.getConsumer
(GenericConsumerPool.java:612)
at nexj.core.rpc.timer.TimerConsumerPool.listen(TimerConsumerPool.java:213)
at nexj.core.util.pool.consumer.GenericConsumerPool.run(GenericConsumerPool.java:339)
at nexj.core.rpc.pool.ThreadPool$Worker$1$1.run(ThreadPool.java:244)
TimerConsumer@1614732944(lastUse=1001ms)
DiagnosticTraceFactory$DiagnosticTraceHolder@420389002(threadName=NexJ TimerConsumerPool@210363069(config=Timer SystemTimer) #243642492)
systemStack:
at nexj.core.rpc.pool.DiagnosticTraceFactory.createTrace(DiagnosticTraceFactory.java:73)
at nexj.core.util.pool.consumer.GenericConsumerPool.getConsumer
(GenericConsumerPool.java:612)
at nexj.core.rpc.timer.TimerConsumerPool.listen(TimerConsumerPool.java:213)
at nexj.core.util.pool.consumer.GenericConsumerPool.run(GenericConsumerPool.java:339)
at nexj.core.rpc.pool.ThreadPool$Worker$1$1.run(ThreadPool.java:244)
The following example shows the contents of a dump file that was generated when a potential leaked resource was detected for a UDP connection.
2016-12-10 11:20:39,627 INFO [nexj.diagnostic.core.rpc.pool.PoolManager] Pool dump: The following resource(s) have been in use for more than 86400 s
UDPConsumerPool@1373030859(config=UDPChannel ClusterMulticastReceiver, idleTimeout=60000, maxSize=4, activeCount=1, idleCount=2)
Active:
UDPConsumer@795336456(lastUse=1753ms)
DiagnosticTraceFactory$DiagnosticTraceHolder@94610066(threadName=NexJ UDPConsumerPool@1373030859(config=UDPChannel ClusterMulticastReceiver) #294728597)
systemStack:
at nexj.core.rpc.pool.DiagnosticTraceFactory.createTrace(DiagnosticTraceFactory.java:73)
at nexj.core.util.pool.consumer.GenericConsumerPool.getConsumer
(GenericConsumerPool.java:612)
at nexj.core.rpc.udp.UDPConsumerPool.listen(UDPConsumerPool.java:153)
at nexj.core.util.pool.consumer.GenericConsumerPool.run(GenericConsumerPool.java:368)
at nexj.core.rpc.pool.ThreadPool$Worker$1$1.run(ThreadPool.java:244
Previously potentially leaked resource is returned to the pool
The following example shows the contents of a dump file that was generated when a previously potentially leaked resource for a database connection was returned to the pool.
2016-12-10 11:20:42,123 INFO [nexj.diagnostic.core.rpc.pool.PoolManager] The following resource was previously reported as active but has been deactivated after 13 s:
RelationalDatabaseConnectionPool@2112392140(fragment=RelationalDatabaseFragment DefaultRelationalDatabase.[default], busyTimeout=10000, idleTimeout=60000, maxSize=33, activeCount=2, idleCount=1)
Idle:
SQLConnection@1250839995(lastUse=13497ms, refCount=0)
The following example shows the contents of a dump file that was generated when a previously potentially leaked resource for a timer was returned to the pool.
2016-12-10 11:20:30,626 INFO [nexj.diagnostic.core.rpc.pool.PoolManager] The following resource was previously reported as active but has been deactivated after 10 s:
TimerConsumerPool@210363069(config=Timer SystemTimer, idleTimeout=60000, maxSize=-1, activeCount=3, idleCount=5)
Idle:
TimerConsumer@1689510533(lastUse=10906ms)
2016-12-10 11:20:42,149 INFO [nexj.diagnostic.core.rpc.pool.PoolManager] The following resource was previously reported as active but has been deactivated after 13 s:
TimerConsumerPool@210363069(config=Timer SystemTimer, idleTimeout=60000, maxSize=-1, activeCount=2, idleCount=6)
Idle:
TimerConsumer@1614732944(lastUse=13525ms)
The following example shows the contents of a dump file that was generated when a previously potentially leaked resource for a UDP connection was returned to the pool.
2016-12-10 11:20:40,863 INFO [nexj.diagnostic.core.rpc.pool.PoolManager] The following resource was previously reported as active but has been deactivated after 0 s:
UDPConsumerPool@1373030859(config=UDPChannel ClusterMulticastReceiver, idleTimeout=60000, maxSize=4, activeCount=2, idleCount=1)
Idle:
UDPConsumer@795336456(lastUse=7ms)