检测正在运行的应用程序中是否存在线程争用 我有一个Java应用程序,我正在使用oswego的PooledExecuter 我强烈怀疑我的应用程序中存在线程争用,因为不管使用PooledExecuter,请求都需要时间=大约没有请求*一个请求需要时间 我想收集证据,证明确实存在线程争用 是否有任何方法可以设置一些JVM参数来显示不同的线程在做什么,或者有任何其他方法可以用于检测线程争用

检测正在运行的应用程序中是否存在线程争用 我有一个Java应用程序,我正在使用oswego的PooledExecuter 我强烈怀疑我的应用程序中存在线程争用,因为不管使用PooledExecuter,请求都需要时间=大约没有请求*一个请求需要时间 我想收集证据,证明确实存在线程争用 是否有任何方法可以设置一些JVM参数来显示不同的线程在做什么,或者有任何其他方法可以用于检测线程争用,java,multithreading,performance,Java,Multithreading,Performance,我不知道有哪些jvm选项可以告诉你这一点,我会在它上附加一个分析器,看看线程是否在争用(阻塞/等待)批,然后查看他们争夺的锁。根据您的描述,您的资源似乎是单线程的,而您的代码无法有效地使用多线程。当这种情况发生时(几次),您应该能够通过执行线程转储看到这一点。您应该看到一个线程正在“真正”工作,而池中的所有其他线程都在等待某些东西或空闲。oswego的库在2004年基本上合并到Java 5.0中。您是否尝试过内置的并发库?据我所知,JVM已经进行了一些优化以使用它?jvisualvam很好地显示

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

根据您的描述,您的资源似乎是单线程的,而您的代码无法有效地使用多线程。当这种情况发生时(几次),您应该能够通过执行线程转储看到这一点。您应该看到一个线程正在“真正”工作,而池中的所有其他线程都在等待某些东西或空闲。

oswego的库在2004年基本上合并到Java 5.0中。您是否尝试过内置的并发库?据我所知,JVM已经进行了一些优化以使用它?
jvisualvam
很好地显示了每个线程正在做的事情。+1用于jvisualvm(它随JDK一起提供),Yourkit profiler是我使用过的商业工具。另外,请确保您已将池大小配置为>1。相关(显示转储和解释)