Performance bottleneck in LogManager
nsabina Apr 24, 2013 12:37 PMWe only see this happening under the load however I would like to rule out some logging misconfiguration on our side.
Thread dump taken when OOM occurs shows that a thread Worker1168_QueryProcessorQueue1201675 owns a lock for CopyOnWriteWeakMap@0x0000004829F3AAA0
There are other 10 worker threads waiting to perform some DQP logging blocked by this lock.
Owner of the lock Worker1168_QueryProcessorQueue1201675 is in "waiting on condition" status.
2LKMONINUSE | sys_mon_t:0x00000048C0D78228 infl_mon_t: 0x00000048C0D782A0: |
3LKMONOBJECT | org/jboss/logmanager/CopyOnWriteWeakMap@0x0000004829F3AAA0: Flat locked by "Worker1168_QueryProcessorQueue1201675" (0x00000049E4E31000), entry count 1 |
3LKWAITERQ | Waiting to enter: |
3LKWAITER | "Worker1048_QueryProcessorQueue1201677" (0x0000004A1CC5BD00) |
3LKWAITER | "Worker1087_QueryProcessorQueue1201678" (0x0000004A1AB72100) |
3LKWAITER | "Worker1082_QueryProcessorQueue1201425" (0x0000004A75BD8A00) |
3LKWAITER | "Worker1108_QueryProcessorQueue1201596" (0x0000004A1EB9CC00) |
3LKWAITER | "Worker1132_QueryProcessorQueue1201682" (0x0000004A1EBBDB00) |
3LKWAITER | "Worker1129_QueryProcessorQueue1201627" (0x0000004A75B9E700) |
3LKWAITER | "Worker1162_QueryProcessorQueue1201583" (0x0000004A763A6900) |
3LKWAITER | "Worker1164_QueryProcessorQueue1201673" (0x0000004A1EBA6D00) |
3LKWAITER | "Worker1185_QueryProcessorQueue1201609" (0x0000004A7644B800) |
3LKWAITER | "Worker1195_QueryProcessorQueue1201680" (0x0000004A764BF600) |
Can this bottleneck be resolved by tweaking some JBoss logging configuration? Other things we should look into in application code to relief such bottleneck ?
Below are stacktrace of the thread that owns the lock and one of the waiting threads. Complete thread dump is attached
Thread Name | Worker1168_QueryProcessorQueue1201675 |
---|---|
State | Waiting on condition |
Monitor | Owns Monitor Lock on org/jboss/logmanager/CopyOnWriteWeakMap@0x0000004829F3AAA0 |
Java Stack | at java/lang/Object.clone(Native Method) at org/jboss/logmanager/FastCopyHashMap.(FastCopyHashMap.java:128(Compiled Code)) at org/jboss/logmanager/CopyOnWriteWeakMap.cleanCopyForMod(CopyOnWriteWeakMap.java:76(Compiled Code)) at org/jboss/logmanager/CopyOnWriteWeakMap.putIfAbsent(CopyOnWriteWeakMap.java:104(Compiled Code)) at org/jboss/logmanager/LoggerNode.getOrCreate(LoggerNode.java:156(Compiled Code)) at org/jboss/logmanager/LoggerNode.getOrCreate(LoggerNode.java:164(Compiled Code)) at org/jboss/logmanager/LoggerNode.getOrCreate(LoggerNode.java:164(Compiled Code)) at org/jboss/logmanager/LogContext.getLogger(LogContext.java:122(Compiled Code)) at org/jboss/logmanager/LogManager.getLogger(LogManager.java:342(Compiled Code)) at org/jboss/logmanager/LogManager.getLogger(LogManager.java:44(Compiled Code)) at java/util/logging/LogManager.demandLogger(LogManager.java:365(Compiled Code)) at java/util/logging/Logger.getLogger(Logger.java:339(Compiled Code)) at org/jboss/logmanager/Logger.getLogger(Logger.java:58(Compiled Code)) at org/jboss/logging/JBossLogManagerProvider.doGetLogger(JBossLogManagerProvider.java:56(Compiled Code)) at org/jboss/logging/JBossLogManagerProvider.getLogger(JBossLogManagerProvider.java:47(Compiled Code)) at org/jboss/logging/Logger.getLogger(Logger.java:2163(Compiled Code)) at org/teiid/jboss/JBossLogger.getLogger(JBossLogger.java:105(Compiled Code)) at org/teiid/jboss/JBossLogger.isEnabled(JBossLogger.java:37(Compiled Code)) at org/teiid/logging/LogManager.isMessageToBeRecorded(LogManager.java:380(Compiled Code)) at org/teiid/dqp/internal/datamgr/ConnectorManager.logSRCCommand(ConnectorManager.java:167(Compiled Code)) at org/teiid/dqp/internal/datamgr/ConnectorWorkItem.close(ConnectorWorkItem.java:154(Compiled Code)) at org/teiid/dqp/internal/process/DataTierTupleSource$2.call(DataTierTupleSource.java:455(Compiled Code)) at org/teiid/dqp/internal/process/DataTierTupleSource$2.call(DataTierTupleSource.java:452(Compiled Code)) at java/util/concurrent/FutureTask$Sync.innerRun(FutureTask.java:345(Compiled Code)) at java/util/concurrent/FutureTask.run(FutureTask.java:177(Compiled Code)) at org/teiid/dqp/internal/process/DQPCore$FutureWork.run(DQPCore.java:118(Compiled Code)) at org/teiid/dqp/internal/process/DQPWorkContext.runInContext(DQPWorkContext.java:249(Compiled Code)) at org/teiid/dqp/internal/process/ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:123(Compiled Code)) at org/teiid/dqp/internal/process/ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:298(Compiled Code)) at java/util/concurrent/ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1121) at java/util/concurrent/ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614(Compiled Code)) at java/lang/Thread.run(Thread.java:779(Compiled Code)) |
Native Stack | No Native stack trace available |
Thread Name | Worker1129_QueryProcessorQueue1201627 |
---|---|
State | Blocked |
Monitor | Waiting for Monitor Lock on org/jboss/logmanager/CopyOnWriteWeakMap@0x0000004829F3AAA0 |
Java Stack | at org/jboss/logmanager/CopyOnWriteWeakMap.putIfAbsent(CopyOnWriteWeakMap.java:98(Compiled Code)) at org/jboss/logmanager/LoggerNode.getOrCreate(LoggerNode.java:156(Compiled Code)) at org/jboss/logmanager/LoggerNode.getOrCreate(LoggerNode.java:164(Compiled Code)) at org/jboss/logmanager/LoggerNode.getOrCreate(LoggerNode.java:164(Compiled Code)) at org/jboss/logmanager/LogContext.getLogger(LogContext.java:122(Compiled Code)) at org/jboss/logmanager/LogManager.getLogger(LogManager.java:342(Compiled Code)) at org/jboss/logmanager/LogManager.getLogger(LogManager.java:44(Compiled Code)) at java/util/logging/LogManager.demandLogger(LogManager.java:365(Compiled Code)) at java/util/logging/Logger.getLogger(Logger.java:339(Compiled Code)) at org/jboss/logmanager/Logger.getLogger(Logger.java:58(Compiled Code)) at org/jboss/logging/JBossLogManagerProvider.doGetLogger(JBossLogManagerProvider.java:56(Compiled Code)) at org/jboss/logging/JBossLogManagerProvider.getLogger(JBossLogManagerProvider.java:47(Compiled Code)) at org/jboss/logging/Logger.getLogger(Logger.java:2163(Compiled Code)) at org/teiid/jboss/JBossLogger.getLogger(JBossLogger.java:105(Compiled Code)) at org/teiid/jboss/JBossLogger.isEnabled(JBossLogger.java:37(Compiled Code)) at org/teiid/logging/LogManager.isMessageToBeRecorded(LogManager.java:380(Compiled Code)) at org/teiid/dqp/internal/datamgr/ConnectorManager.logSRCCommand(ConnectorManager.java:167(Compiled Code)) at org/teiid/dqp/internal/datamgr/ConnectorWorkItem.handleError(ConnectorWorkItem.java:186(Compiled Code)) at org/teiid/dqp/internal/datamgr/ConnectorWorkItem.execute(ConnectorWorkItem.java:260(Compiled Code)) at org/teiid/dqp/internal/process/DataTierTupleSource.getResults(DataTierTupleSource.java:425(Compiled Code)) at org/teiid/dqp/internal/process/DataTierTupleSource$1.call(DataTierTupleSource.java:170(Compiled Code)) at org/teiid/dqp/internal/process/DataTierTupleSource$1.call(DataTierTupleSource.java:167(Compiled Code)) at java/util/concurrent/FutureTask$Sync.innerRun(FutureTask.java:345(Compiled Code)) at java/util/concurrent/FutureTask.run(FutureTask.java:177(Compiled Code)) at org/teiid/dqp/internal/process/DQPCore$FutureWork.run(DQPCore.java:118(Compiled Code)) at org/teiid/dqp/internal/process/DQPWorkContext.runInContext(DQPWorkContext.java:249(Compiled Code)) at org/teiid/dqp/internal/process/ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:123(Compiled Code)) at org/teiid/dqp/internal/process/ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:298(Compiled Code)) at java/util/concurrent/ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1121) at java/util/concurrent/ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614(Compiled Code)) at java/lang/Thread.run(Thread.java:779(Compiled Code)) |
Native Stack | No Native stack trace available |