使用Java spring 2.5(Tomcat容器)和HikariCP和连接池系统,我如何知道每个时刻有多少个Java线程正在工作以及每个线程有多少个数据库连接? 如果可能的话,我希望分别记录每个线程和数据库连接的日志。例如,线程 A 目前有 3 个打开的数据库连接,并且这些是从每个连接执行的查询。
最佳答案
当您使用像 HikariCP 这样的连接池时,存在物理和虚拟数据库连接。连接池根据需要打开物理连接,并分发虚拟连接,这些虚拟连接是物理连接的包装器。虚拟连接只能短时间使用,关闭虚拟连接会将物理连接返回到池中。
从这个意义上说,每个线程不应阻塞多个虚拟连接。要查找线程不返回虚拟连接的情况,可以使用 JProfiler 中的 JDBC 连接泄漏检测。 。它将向您显示已打开很长时间且可能存在连接泄漏的虚拟连接。如果记录 CPU 数据,您还可以看到线程请求每个此类连接的堆栈跟踪。
要详分割析连接使用情况,JDBC 探针的“事件” View 可以显示所有已执行的语句,还可以显示哪些线程打开和关闭物理数据库连接以及时间戳。
免责声明:我公司开发JProfiler
关于java - 为线程和数据库连接提供更多调试见解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73143132/