Windows 2019服务器IIS回收后Oracle数据库连接激增问题排查
定位IIS回收后Oracle连接数翻倍的问题及监控方案
一、定位连接创建来源
1. 从Oracle数据库端排查连接详情
通过查询Oracle系统视图,直接获取连接的发起方信息:
SELECT s.sid, s.serial#, s.username, s.program, s.module, s.action, p.spid, s.machine, s.logon_time FROM v$session s JOIN v$process p ON s.paddr = p.addr WHERE s.username = '你的应用数据库用户名';
program字段会显示发起连接的进程名,IIS工作进程通常是w3wp.exe,可确认是否为目标VB.NET应用产生的连接;machine字段对应Web服务器的主机名,排除其他机器的连接干扰;logon_time可对应IIS回收的时间点,确认连接是回收后新创建的;module和action字段会携带ODP.NET传递的应用上下文(如程序集名称、代码方法名),能定位到具体的代码模块。
2. 检查ODP.NET连接池配置
查看应用的web.config中的数据库连接字符串,重点关注连接池相关参数:
<connectionStrings> <add name="OracleConn" connectionString="Data Source=ORCL;User Id=APP_USER;Password=XXX;Min Pool Size=5;Max Pool Size=50;Connection Lifetime=1800;" /> </connectionStrings>
- 如果
Min Pool Size设置过高,IIS回收后新启动的工作进程会直接创建该数量的连接,若旧进程的连接未被及时回收(即使配置了expire_time,可能存在延迟),就会出现连接数翻倍; Connection Lifetime参数控制连接的最大存活时间,到期后连接会被销毁,可调整该值加速旧连接回收。
3. 排查应用初始化逻辑
检查VB.NET应用的启动代码(如Global.asax的Application_Start方法、静态类构造函数),确认是否存在以下情况:
- 预加载数据时批量创建数据库连接,但未正确释放;
- 使用静态连接对象,未实现自动释放逻辑,导致IIS回收后新进程重复创建;
- 第三方组件或框架在启动时自动初始化大量连接池连接。
二、可用的监控工具
1. Oracle端监控工具
- 系统视图实时查询:定时执行
v$session、v$process、v$session_wait视图查询,记录连接数变化和连接状态; - Oracle Enterprise Manager (OEM):通过OEM的性能面板监控连接数趋势,设置连接数阈值告警,关联IIS回收时间点分析;
- AWR报告:生成IIS回收前后的AWR报告,查看连接数变化、空闲连接占比及相关性能指标。
2. Windows/IIS端监控工具
- Performance Monitor (perfmon):添加以下计数器跟踪:
.NET Data Provider for Oracle->NumberOfActiveConnections、NumberOfPooledConnections:实时查看连接池的连接数量变化;IIS Worker Processes->Active Requests、Process ID:跟踪IIS回收前后的工作进程数量;Process->w3wp.exe->Handle Count、Thread Count:关联数据库连接数变化,确认进程资源占用情况。
- IIS日志:启用IIS的详细日志,检查回收后是否有异常请求触发连接创建(即使无用户操作,可能存在定时任务、健康检查请求)。
3. 代码级与网络监控
- Visual Studio诊断工具:将调试器附加到IIS工作进程,在IIS回收后跟踪连接创建的调用栈,定位具体代码位置;
- 自定义日志:在VB.NET代码中添加连接创建/释放的日志(如用
Trace或日志框架),记录调用方法、时间和连接ID,对应IIS回收时间点分析; - Wireshark:抓取Web服务器与Oracle数据库之间的TCP数据包,确认IIS回收后是否有大量TCP连接建立请求,验证连接发起方。
补充排查点
- 确认
sqlnet.ora的expire_time参数是否生效:查询v$session的last_call_et字段,查看空闲连接的持续时间是否超过设置的阈值; - 检查数据库配置文件中的
IDLE_TIME参数,确认是否开启了空闲连接自动断开,且RESOURCE_LIMIT参数已设置为TRUE。
内容的提问来源于stack exchange,提问作者Nate Himmons
相关产品推荐
相关产品推荐

