Java 查找activemq连接泄漏的最佳方法

Java 查找activemq连接泄漏的最佳方法,java,activemq,Java,Activemq,这是可耻的,但我们知道存在一些activemq连接泄漏。代码很旧,有很多曲折,这使得查找泄漏流非常困难 我们从批处理机上解雇了许多短期工。我们知道并非所有路径都正确关闭activemq连接。当连接未关闭,但作业终止时,activemq将保持该连接一段时间。最终,有些关键应用程序会受到影响,因为activemq最大连接限制超过了 是否可以设置连接名或其他标识信息,以便在activemq的日志文件中显示未正确关闭的连接。这将告诉我们需要检查哪些日志文件。工作的数量之多使得我们很难找出到底是哪种工作导

这是可耻的,但我们知道存在一些activemq连接泄漏。代码很旧,有很多曲折,这使得查找泄漏流非常困难

我们从批处理机上解雇了许多短期工。我们知道并非所有路径都正确关闭activemq连接。当连接未关闭,但作业终止时,activemq将保持该连接一段时间。最终,有些关键应用程序会受到影响,因为activemq最大连接限制超过了

是否可以设置连接名或其他标识信息,以便在activemq的日志文件中显示未正确关闭的连接。这将告诉我们需要检查哪些日志文件。工作的数量之多使得我们很难找出到底是哪种工作导致了这个问题。然而,一旦我们了解了工作,我们就可以从日志中推断出足够的信息来查找和修复连接泄漏


现在,我们看到的只是连接起源的ip地址,由于所有作业都来自同一台机器,如果将
jms.clientID=something
添加到连接URL中,并在conf/log4j.properties中打开调试日志记录,那么找出问题的起因将毫无帮助,您将在AMQ上的调试日志中获得客户机id。然后,您可以编写一些东西来分析日志,找到给定clientID的AMQ ID,并以这种方式匹配日志

但是,如果您的进程确实正在退出,那么此时您的连接应该会消失(即,如果没有进程来维护连接,则无法保持连接的活动状态)

如果您在Linux上运行,您可以执行netstat-anp | grep 61616(或您的AMQ端口是什么)来查看哪些PID仍然与AMQ有连接,然后执行另一个ps来查看这些进程是什么