哪个Java线程负责PostgreSQL数据库进程?

Dan*_*ein 2 java database linux postgresql jdbc

鉴于JVM连接到PostgreSQL数据库(在Linux上),有没有办法找出Java中的哪个线程负责数据库中的进程?

注意:我正在调试资源泄漏错误,它显示为数据库中的一些空闲事务进程.将这些与负责的线程相匹配将是有用的,因为线程名称将缩小搜索范围.

kgr*_*ttn 5

您可以将application_name(带有SET语句)设置为可以与Java线程名称匹配的内容.


Edm*_*und 5

一个有用的技巧是向Java进程发送SIGQUIT信号,例如

kill -QUIT your_process_id
Run Code Online (Sandbox Code Playgroud)

哪个不会杀死它,但会告诉它打印一个线程转储.这将列出所有线程,并回溯它们当前正在做的事情.不幸的是,这通常不会包含像"conn.setAutoCommit(false)"那样明显的东西,但它会告诉你每个线程的位置.

然后,您可以在代码中找到这些点,并尝试追溯以查看是否有任何事务开始之前,提交/回滚无法匹配.

在编写应用程序时,另一个有用的事情是创建和控制连接的公共位置(即另一个抽象层!).在创建连接并将其分配给线程时,以及在其中一个连接上开始事务时,这将成为放置日志记录的好地方.