检测正在运行的应用程序中是否存在线程争用

时间:2012-04-19 12:49:50

标签: java multithreading performance

  1. 我有一个Java应用程序,我正在使用oswego的PooledExecuter。
  2. 我强烈怀疑我的应用程序中存在线程争用,无论是否使用PooledExecuter,请求都需要时间=大致没有请求*时间用于一个请求。
  3. 我想收集证据确实存在线索争用。
  4. 有没有什么方法可以设置一些JVM参数来显示不同的线程在做什么,或者用什么其他方式来检测线程争用。

2 个答案:

答案 0 :(得分:2)

从您的描述中可以看出,您拥有一个单线程资源,并且您的代码无法有效地使用多个线程。你应该能够通过在发生这种情况时进行线程转储来看到这种情况(几次)你应该看到一个线程在做“真正的”工作,并且池中的所有其他线程都在等待某些事情或者空闲。

答案 1 :(得分:1)

我不知道jvm选项可以告诉你这个,我会附加一个分析器,看看线程是否竞争(阻塞/等待)批次,然后看看他们争夺哪些锁。