You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Websphere IBM MQ连接泄漏致线程阻塞问题排查求助

WebSphere MQ连接泄漏与类加载失败问题排查

问题背景

  • 已配置WAS JMS池连接超时为5秒,读取JMS消息时通过finally块关闭连接,但连接未按超时设置释放,出现泄漏
  • 无其他应用错误日志,仅通过指定跟踪字符串捕获到连接堆栈信息

使用的WAS跟踪字符串

=info: JMSApi=all: JMSServer=all: Messaging=all: JMS_WASTraceAdapter=all: com.ibm.mq.*=all: jmsApi=all: ConnLeakLogic=all: com.ibm.ejs.j2c.*=all

连接泄漏跟踪日志

Connection marked to be destroyed. Waiting for transaction end and connection close - MCWrapper id 53b353b3 Managed connection com.ibm.ejs.jms.JMSManagedQueueConnection@29422942
        managed connection factory = com.ibm.ejs.jms.WMQJMSRAManagedConnectionFactory@70a470a4
        physical connection = com.ibm.mq.jms.MQXAQueueConnection@44504450
        connectorName = JMS$MIUFACTORY$JMSManagedConnection@11
        credential = null
        open connection handles = [com.ibm.ejs.jms.JMSQueueConnectionHandle@655a655a] State:STATE_ACTIVE_INUSE Thread Id: 0000005f Thread Name: WebContainer : 5 Handle count 1 Start time inuse Wed Jan 18 16:00:18 GMT 2023 Time inuse 1479 (seconds)
    Connection marked to be destroyed. Waiting for transaction end and connection close - MCWrapper id 270b270b Managed connection com.ibm.ejs.jms.JMSManagedQueueConnection@1c921c92
        managed connection factory = com.ibm.ejs.jms.WMQJMSRAManagedConnectionFactory@70a470a4
        physical connection = com.ibm.mq.jms.MQXAQueueConnection@3c933c93
        connectorName = JMS$MIUFACTORY$JMSManagedConnection@7
        credential = null
        open connection handles = [com.ibm.ejs.jms.JMSQueueConnectionHandle@1c2f1c2f] State:STATE_ACTIVE_INUSE Thread Id: 00000035 Thread Name: WebContainer : 2 Handle count 1 Start time inuse Wed Jan 18 15:24:28 GMT 2023 Time inuse 3629 (seconds)
  Total number of connection in unshared pool: 2 Connection Leak Logic Information:
  MCWrapper id 53b353b3 Managed connection com.ibm.ejs.jms.JMSManagedQueueConnection@29422942
        managed connection factory = com.ibm.ejs.jms.WMQJMSRAManagedConnectionFactory@70a470a4
        physical connection = com.ibm.mq.jms.MQXAQueueConnection@44504450
        connectorName = JMS$MIUFACTORY$JMSManagedConnection@11
        credential = null
        open connection handles = [com.ibm.ejs.jms.JMSQueueConnectionHandle@655a655a] State:STATE_ACTIVE_INUSE Thread Id: 0000005f Thread Name: WebContainer : 5 Handle count 1
     Start time inuse Wed Jan 18 16:00:18 GMT 2023 Time inuse 1479 (seconds)
     Last allocation time Wed Jan 18 16:00:18 GMT 2023
       getConnection stack trace information:
          com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:900)
          com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle.createQueueConnection(JMSQueueConnectionFactoryHandle.java:84)

环境版本信息

  • WebSphere版本:7.0.0.45
  • MQ资源适配器版本:
    • Implementation-Title: WebSphere MQ Resource Adapter
    • Implementation-Version: 7.0.1.14

补充分析:类加载异常

经排查,连接泄漏由类加载失败触发,相关jar包已包含在EAR中,但出现ClassNotFoundException,堆栈如下:

java.net.URLClassLoader.findClass(URLClassLoader.java:457): 
at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:201):  
at java.lang.ClassLoader.loadClass(ClassLoader.java:676):   
at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:112):  
at java.lang.ClassLoader.loadClass(ClassLoader.java:642):   
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62):   
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58):   
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:545):  
at java.lang.ClassLoader.loadClass(ClassLoader.java:642):   
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:513):  
at java.lang.ClassLoader.loadClass(ClassLoader.java:642):   
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:545):  
at java.lang.ClassLoader.loadClass(ClassLoader.java:642):   
at 

排查与解决方案建议

类加载问题修复

  1. 验证jar包完整性:检查EAR中对应的jar包是否损坏,重新打包替换,确保目标类文件存在于jar内
  2. 调整类加载策略:在WebSphere控制台中,将应用的类加载策略设置为PARENT_LAST,避免父类加载器优先加载导致找不到自定义类
  3. 确认jar包位置:确保jar包放置在EAR的APP-INF/lib目录(多模块应用场景),而非单个模块的WEB-INF/lib,保证应用类加载器可访问
  4. 排查类冲突:检查WebSphere全局库(如lib/ext目录)是否存在同名类,避免加载错误版本的类

连接泄漏问题解决

  1. 优先修复类加载异常:类加载失败会导致finally块无法正常执行,进而无法关闭连接,解决ClassNotFoundException是核心前提
  2. 增强连接关闭逻辑:在捕获Throwable的代码块中执行连接关闭操作,确保即使出现Error(如类加载错误)也能释放连接:
    Connection conn = null;
    try {
        // 获取连接并处理JMS消息逻辑
    } catch (Exception e) {
        // 异常处理逻辑
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception ce) {
                // 记录连接关闭异常日志
            }
        }
    }
    
  3. 检查事务状态:日志显示连接在等待事务结束,通过WebSphere事务监控查看是否存在未提交/回滚的全局事务,及时清理挂起事务
  4. 升级版本补丁:WebSphere 7.0.0.45存在已知的JMS连接池泄漏问题,可升级至更高Fix Pack(如7.0.0.47及以上),同时升级MQ资源适配器到兼容版本

内容的提问来源于stack exchange,提问作者Harshal Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:50:23