java - 为线程和数据库连接提供更多调试见解

标签 java spring database-connection profiling hikaricp

使用Java spring 2.5(Tomcat容器)和HikariCP和连接池系统,我如何知道每个时刻有多少个Java线程正在工作以及每个线程有多少个数据库连接? 如果可能的话,我希望分别记录每个线程和数据库连接的日志。例如,线程 A 目前有 3 个打开的数据库连接,并且这些是从每个连接执行的查询。

最佳答案

当您使用像 HikariCP 这样的连接池时,存在物理和虚拟数据库连接。连接池根据需​​要打开物理连接,并分发虚拟连接,这些虚拟连接是物理连接的包装器。虚拟连接只能短时间使用,关闭虚拟连接会将物理连接返回到池中。

从这个意义上说,每个线程不应阻塞多个虚拟连接。要查找线程不返回虚拟连接的情况,可以使用 JProfiler 中的 JDBC 连接泄漏检测。 。它将向您显示已打开很长时间且可能存在连接泄漏的虚拟连接。如果记录 CPU 数据,您还可以看到线程请求每个此类连接的堆栈跟踪。

enter image description here

要详分割析连接使用情况,JDBC 探针的“事件” View 可以显示所有已执行的语句,还可以显示哪些线程打开和关闭物理数据库连接以及时间戳。

enter image description here

免责声明:我公司开发JProfiler

关于java - 为线程和数据库连接提供更多调试见解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73143132/

相关文章:

java - 外键必须与引用主键具有相同的列数 Hibernate - 多对多

spring - Apache CXF 噩梦

javascript - 如何将 SQLite 本地数据库连接到 HTML 前端?

java - 使用 ifelse 语句修改 JSTL 中的代码

mysql - 如何使用 Ruby 作为脚本语言连接到 Rails 之外的 MySql 数据库

java - 在 finally block 中抛出异常是性能问题吗?

java - 32位精度,什么意思?

java - 使用 Spring NamedParameterJdbcTemplate,如何更新数据库中每个客户的列?

Java 程序无法在 Solaris 上使用 ftp。

java - 从数组(Java)中获取所有大小 n 组合的算法?