一次DB服务器性能低下引发的对Nonpaged Pool Leak问题的诊断
2016-08-02 16:40
901 查看
1. 问题表象+分析
最开始是DB访问性能下降,某个不用Cache、直接到DB的查询10s+都不返回。上去一看,DB Server内存97%,可用内存才100多M。Windows毕竟不是iOS,不留出足够的内存跑起来还是很吃力的。我理解在核心程序全部常驻内存的情况下,至少还应留出10%的Ram,否则一旦涉及到读PageFile或者Disk,性能就会大幅下降。
这台机器是Server 2008 R2 64bit,4G的内存,确实比较小。但看了下进程列表,最大的才不到200M,大部分都只有几十M。大概估算一下应该不到4G。
在资源监视器里,把进程列表ctrl+A->copy到excel里一求和,总共才1.1G。那剩下的接近3个G去哪儿了?
上面这张图,Kernel Memory核心内存,显示Paged部分大约900M,Nonpaged部分有2.3G。看来这才是问题的关键了。
Google搜关键字kernel memory nonpaged high/leak,一大堆结果,尤其下面几篇文章,说的非常好:
Windows using too much RAM, how to diagnose resource hog
Troubleshooting Pool Leaks Part 2 – Poolmon // 这个系列尤其好!
Troubleshooting Nonpaged and Paged Pool Errors in Windows
接下去的诊断过程,基本是参照这几篇来的。
2. 诊断过程
2.1 先下载Windows Driver Kit
由于要用到poolmon.exe,所以要安装这个Driver Kit。下下来的wdksetup.exe是个在线安装器,这是Windows一贯的风格,这种方式解决依赖还是不错的,但网络环境一定要OK,不然断了只能从0开始,相当郁闷!2.2 跑命令
可以选择下Stand alone的离线包,方便内网机的安装。不过好在poolmon.exe这个工具是没依赖的,装好直接copy到server上跑命令。//能看到Tag = VNet的驱动占用了>2G的非分页核心内存 poolmon -p -b //如果进程管理器里,非页面缓冲池这一列没有高内存,基本可以肯定是驱动引起的,于是进入drivers目录 cd /d c:\windows\system32\drivers //这个命令出来很多乱码,一开始以为是mrxsmb组件有问题,但网上一搜没东西,hotfix也是针对win2012的 findstr /s VNet *.sys mrxsmb.sys mrxsmb10.sys mrxsmb20.sys //去掉了很多类似的结果,这样显示清晰的多,看下来vnetflt.sys更可疑,这是个管理虚机的驱动 strings * | findstr VNet c:\Windows\System32\drivers\mrxsmb.sys: Active VnetRoots-- %x VNetRoot %p c:\Windows\System32\drivers\mrxsmb10.sys: Callback rdbss for create VNetRootCtxt c:\Windows\System32\drivers\mrxsmb20.sys: MRxSmbCreateVNetRoot c:\Windows\System32\drivers\rdbss.sys: RxCreateVNetRoot c:\Windows\System32\drivers\vnetflt.sys: VNet c:\Windows\System32\drivers\vnetflt.sys: VNet3 c:\Windows\System32\drivers\vnetflt.sys: VNetH
2.3 搜解决方案
在vmware的KB里找到一篇相关的,说是暂时没有解决方法,但是有个workaround可以禁用这个驱动:在注册表里设置Start = 4。[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\vnetflt] Start=4
记得先备份reg,然后重启,观察3-5天,nonpaged不涨的话就OK了。
相关文章推荐
- linux下查找字符串&mysql-为magento性能测试修改innodb的innodb_buffer_pool_size而引发的问题
- 2014-8-21的一次性能诊断--应用服务器瓶颈
- mysql - 为magento性能测试修改innodb的innodb_buffer_pool_size而引发的问题
- 一次比较麻烦的性能问题诊断及解决
- 一次比较麻烦的性能问题诊断及解决
- 一次Mysql数据库服务器磁盘空间满引发的写入和同步问题
- Domino服务器性能问题诊断与排除手册
- 一次WebSphere性能问题诊断过程
- 由一次自建库迁移到阿里云RDS引发的性能问题。
- 使用THREAD_POOL.execute引发一次神奇的多线程问题
- 一次涉及到物化视图的DB2 Insert性能问题的诊断
- 【性能诊断】StackOverflow引发的“网络”及系统稳定性问题
- 一次Mysql数据库服务器磁盘空间满引发的写入和同步问题
- 如何诊断Oracle Redo Log引发的性能问题
- Domino服务器性能问题诊断与排除手册
- 利用SQL Profiler来诊断SQL服务器的性能问题
- 利用JProfiler对应用服务器内存泄漏问题诊断一例
- 可能引发性能问题的几个写法,看看你占哪一个.
- Session_End引发的性能问题!
- ADO.NET数据库连接池的性能测试——出色的DB Pool