此前遇到一个项目反馈系统宕机问题,摘要描述如下:
- 系统不定期出现卡死现象,在多个模块不同功能上都出现过,未发现与特定功能相关的明显规律;
- 当系统出现卡死现象时,新的用户无法登陆系统;
- 跟踪应用服务器,未发现资源不足的情况(CPU、内存使用正常)
- 数据库服务器资源占用也正常(CPU不高,也未发现死锁、SQL阻塞等情况)
在问题再次发生时,使用ProcDump联系抓取多个dump文件:procdump -ma -s 20 -n 3 w3wp.exe
使用windbg命令(!tp)查看线程池发现,100多个线程都处于Running状态。
进一步使用命令(~* e!clrstack)查看所有线程的堆栈信息时,发现大量的线程在等待获取数据库连接。
至此可以推断,程序中可能存在连接泄露的代码。
查看数据库连接字符串没有配置连接池大小,缺省使用100个连接。
当然,使用应用服务器上的windows性能监视器,增加NumberOfPooledConnections,可以看到问题发生时前连接数陡增的情况,也可以验证此问题。
windbg主要操作如下:
Windows性能计数器的示例
时间: 2024-11-15 06:14:07