我对信号量有锁争用,我想测量锁保存的时间。
是否有一些免费的工具来测量这样的东西?
尝试过Visual VM,我看到了锁争用,但我对时代更感兴趣。
感谢您的任何消化。
我喜欢这个
的50个"[ACTIVE] ExecuteThread: '226' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=3 tid=0x00000001099fa000 nid=0x41e waiting for monitor entry [0xfffffffe5a8f9000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.lang.ClassLoader.loadClass(ClassLoader.java:292)
- waiting to lock <0xfffffffeb063ebb0> (a weblogic.utils.classloaders.GenericClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:176)
at com.thoughtworks.xstream.core.util.CompositeClassLoader.loadClass(CompositeClassLoader.java:69)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.thoughtworks.xstream.XStream.dynamicallyRegisterConverter(XStream.java:723)
at com.thoughtworks.xstream.XStream.setupConverters(XStream.java:696)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:445)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:385)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:342)
答案 0 :(得分:5)
您可以使用Sun Studio Performance Analyzer并启用锁定配置文件。这将显示锁定所花费的时间。
jProfiler还有线程/监视器统计信息选项卡,因此您可以尝试一下。
另一种方法是通过在给定的时间间隔内对线程转储进行采样并手动计算来获得估算值。
另一种方法是打印安全点统计(+XX:PrintSafePointStatistics
),这也打印出“毫秒线程花费的时间”,有关详细信息,请参阅JVM SafePointStatistics - Can anyone help interpret it。
答案 1 :(得分:3)
我认为您可以在调用super.acquire()之前和之后扩展Semaphor,覆盖获取和记录必要信息。