From: Roskens, R. <Ron...@bi...> - 2011-07-25 20:37:02
|
I happened to be checking a thread dump from my opennms and noticed that 9 out of 10 of the QueueingRrdStrategy-X threads were parking on the same lock. This got me to thinking, does it make sense if your using org.jrobin.core.RrdBackendFactory=MNIO to increase the number of threads since that particular jrobin backend storage method has its own locking? Here's what the parked threads looked like with the exception being that the RrdDb.store() lock was unique for each thread. "QueuingRrdStrategy-2" prio=3 tid=0x00000001069f6800 nid=0xed waiting on condition [0xfffffffe476fe000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0xfffffffebd497ce8> (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.acquireQueued(AbstractQueuedSynchronizer.java:842) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1178) at java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:807) at org.jrobin.core.RrdNioByteBufferBackend.write(RrdNioByteBufferBackend.java:93) at org.jrobin.core.RrdBackend.writeDouble(RrdBackend.java:180) at org.jrobin.core.RrdPrimitive.writeDouble(RrdPrimitive.java:87) at org.jrobin.core.RrdDouble.set(RrdDouble.java:43) at org.jrobin.core.Datasource.accumulate(Datasource.java:268) at org.jrobin.core.Datasource.process(Datasource.java:204) at org.jrobin.core.RrdDb.store(RrdDb.java:600) - locked <0xfffffffe8a93c5b0> (a org.jrobin.core.RrdDb) at org.jrobin.core.Sample.update(Sample.java:221) at org.jrobin.core.Sample.setAndUpdate(Sample.java:243) at org.opennms.netmgt.rrd.jrobin.JRobinRrdStrategy.updateFile(JRobinRrdStrategy.java:219) at org.opennms.netmgt.rrd.jrobin.JRobinRrdStrategy.updateFile(JRobinRrdStrategy.java:80) at org.opennms.netmgt.rrd.QueuingRrdStrategy$UpdateOperation.process(QueuingRrdStrategy.java:520) at org.opennms.netmgt.rrd.QueuingRrdStrategy.processPendingOperations(QueuingRrdStrategy.java:1139) at org.opennms.netmgt.rrd.QueuingRrdStrategy.run(QueuingRrdStrategy.java:1094) at java.lang.Thread.run(Thread.java:662) Ron This e-mail message is being sent solely for use by the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by phone or reply by e-mail, delete the original message and destroy all copies. Thank you. |