我们有一个查询需要 3 小时才能完成。这在以前不是问题。之前,调用这个查询的代码部署在weblogic上,并使用后者自己的连接池管理器。
现在,由于该进程占用了大量内存,因此我们将这段代码取出并使其在自己的堆空间上运行。调用查询的请求是通过jms发出的。我还注意到我们使用的连接池管理器是 dbcp,使用其默认设置(最大连接数 = 8,最小连接数 = 0)。 jms 客户端是多线程的。
当我们通过接口(interface)(TOAD)执行查询时,只需要 2 秒,因此从这里我已经排除了“指责”数据库的可能性。
我想知道我可以从这里采取什么步骤来找到瓶颈。也许与连接池有关?
最佳答案
您应该使用 VisualVM 或线程转储等工具来检查线程正在做什么。他们只是在等待某些 IO 操作完成吗?是否有一些同步不良的代码等待的时间比需要的时间长得多?甚至可能是一个在三小时(或三个一小时)超时后停止的死锁?
关于java - 查询运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512928/