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

Glassfish 3.1.2部署应用连接Oracle的活跃连接相关问题咨询

JDBC连接池状态查询与连接丢失排查方案

1、JDBC连接存活/活跃状态查询方法

  • 利用连接池自带监控能力:
    • HikariCP开启MXBean功能后,可通过JMX工具(JConsole、JVisualVM)直接查看activeConnections(活跃连接数)、idleConnections(空闲连接数)、totalConnections(总连接数)等实时指标,也可在代码中引入HikariPoolMXBean接口定时采集指标输出到日志或内部监控系统。
    • Druid连接池开启内置监控页面后,可直接在Web端查看所有连接的存活状态、持有时间、执行过的SQL明细,也可通过DruidDataSource提供的API直接拉取实时连接统计数据。
    • Tomcat JDBC等其他连接池均有对应的JMX指标或API,直接调用即可获取连接状态。
  • 通用无侵入查询方案:
    • 执行jstack <应用进程ID>抓取线程栈,搜索连接池类名、oracle.jdbc.OracleConnection等关键词,统计持有数据库连接的运行态线程数量,可侧面反映当前活跃连接情况。
    • 在应用服务器上执行netstat -anp | grep 1521(1521为Oracle默认端口,有修改则替换为实际端口),统计和数据库之间处于ESTABLISHED状态的TCP连接数,可验证连接池总连接规模是否符合配置。

2、连接丢失/未到达数据库排查方案

  • 先校验连接池配置合理性:
    检查是否配置了过短的连接回收阈值,比如removeAbandonedTimeout设置小于正常业务SQL的执行时长,会导致正在使用的连接被误回收;还要确认连接池的最小空闲连接、最大连接参数是否真的生效,避免配置文件写错位置没被加载。
  • 应用端埋点对比验证:
    在连接获取、释放的逻辑中增加日志埋点,记录每次获取连接的结果(成功/失败/超时)、连接的唯一标识,统计单位时间内的连接获取成功率。如果有大量获取失败/超时的记录,说明连接池供给不足或者连接创建链路有问题。
  • 数据库端会话匹配校验:
    在Oracle中执行如下SQL查询来自对应应用服务器的会话情况:
    SELECT sid, serial#, machine, program, status FROM v$session 
    WHERE machine = '<应用服务器主机名>' AND program LIKE '<应用进程标识>%';
    
    将查询到的总会话数和应用端连接池上报的总连接数做对比,如果差值超过10%,基本可以判定存在连接丢失的情况。
  • 网络链路问题排查:
    如果应用端显示总连接数符合最小8的配置,但数据库端会话数远小于8,大概率是中间网络设备、防火墙的空闲会话超时时间短于连接池的空闲连接存活时间,导致TCP连接被中间设备静默销毁,连接池还认为连接处于存活状态。这种情况可开启连接池的空闲连接检测功能,配置定期执行SELECT 1 FROM DUAL验证连接有效性,失效连接直接销毁重建即可。

内容的提问来源于stack exchange,提问作者Amit More

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:24:01