【性能诊断】八、并发场景的性能分析(windbg案例,连接泄露)
2015-06-19 14:46
447 查看
此前遇到一个项目反馈系统宕机问题,摘要描述如下:
系统不定期出现卡死现象,在多个模块不同功能上都出现过,未发现与特定功能相关的明显规律;
当系统出现卡死现象时,新的用户无法登陆系统;
跟踪应用服务器,未发现资源不足的情况(CPU、内存使用正常)
数据库服务器资源占用也正常(CPU不高,也未发现死锁、SQL阻塞等情况)
在问题再次发生时,使用ProcDump联系抓取多个dump文件:procdump -ma -s 20 -n 3 w3wp.exe
使用windbg命令(!tp)查看线程池发现,100多个线程都处于Running状态。
进一步使用命令(~* e!clrstack)查看所有线程的堆栈信息时,发现大量的线程在等待获取数据库连接。
至此可以推断,程序中可能存在连接泄露的代码。
查看数据库连接字符串没有配置连接池大小,缺省使用100个连接。
当然,使用应用服务器上的windows性能监视器,增加NumberOfPooledConnections,可以看到问题发生时前连接数陡增的情况,也可以验证此问题。
windbg主要操作如下:
Windows性能计数器的示例, NumberOfPooledConnections
系统不定期出现卡死现象,在多个模块不同功能上都出现过,未发现与特定功能相关的明显规律;
当系统出现卡死现象时,新的用户无法登陆系统;
跟踪应用服务器,未发现资源不足的情况(CPU、内存使用正常)
数据库服务器资源占用也正常(CPU不高,也未发现死锁、SQL阻塞等情况)
在问题再次发生时,使用ProcDump联系抓取多个dump文件:procdump -ma -s 20 -n 3 w3wp.exe
使用windbg命令(!tp)查看线程池发现,100多个线程都处于Running状态。
进一步使用命令(~* e!clrstack)查看所有线程的堆栈信息时,发现大量的线程在等待获取数据库连接。
至此可以推断,程序中可能存在连接泄露的代码。
查看数据库连接字符串没有配置连接池大小,缺省使用100个连接。
当然,使用应用服务器上的windows性能监视器,增加NumberOfPooledConnections,可以看到问题发生时前连接数陡增的情况,也可以验证此问题。
windbg主要操作如下:
Windows性能计数器的示例, NumberOfPooledConnections
相关文章推荐
- 编辑距离和最长公共子串
- 风险案例-29期- 项目管理投入不够, 缺乏项目统筹全局观,使项目成本、进度、质量存在很大风险
- opencv 基本数据类型 cvPoint cvSize cvScalar cvRect
- com.google.gson.internal.LinkedTreeMap cannot be cast to test.UserBean at t..
- SWT常用组件
- Win32开发 - windbg调试命令
- Dos命令将合并两个文本文件的内容
- Android 百度地图2.4.2版本标注动画效果
- 风险案例-28期-项目Leader与团队成员缺乏沟通,问题响应度较慢导致团队士气低落,工作效率低
- hybris Commerce Developer Part 1
- ubuntu安装redis的方法以及PHP安装redis扩展、CI框架sess使用redis的方法
- Bash 快捷键大全
- 一步步走进Android MaterialDesign
- phpsso忘记密码的解决办法
- nodejs+express+ejs+mongoose实例
- 【华为oj】提取不重复的整数
- GIT 恢复已删除的提交
- 如何用js判断不同浏览器
- SAT阅读8道填空练习题精选
- ViewFlow 源码笔记(2)