一次DB服务器性能低下引发的对Nonpaged Pool Leak问题的诊断
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了。
一次DB服务器性能低下引发的对Nonpaged Pool Leak问题的诊断的更多相关文章
- db服务器参数优化
1.swap分区 swap作用是在系统内存不够的情况下,当做临时的内存使用. swap是在硬盘上,性能肯定没有再内存好,当系统内存使用超过40%的时候, swap会可能被使用,而系统一旦使用swap会 ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- DB服务器中的参数优化
1.swappiness 禁止系统使用swap空间,配置/etc/sysctl.conf中的vm.swappiness=0 2.Scheduler调度 Scheduler调度,指的是磁盘的IO调度算法 ...
- 转贴---Linux服务器性能评估
http://fuliang.iteye.com/blog/1024360 http://unixhelp.ed.ac.uk/CGI/man-cgi?vmstat ------------------ ...
- 检查Linux服务器性能
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在? 概述通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. • uptime• ...
- 我为什么很烦在DB服务器上安装杀毒软件
常见的数据库连接问题无外乎是在数据库服务器本地可以连接SQL Server,但通过其他服务器就不可以连接.但这次我却碰到了相反的情况,在服务器本地无法通过IP/实例名连接,但从其他服务器却可以.而且每 ...
- 用十条命令在一分钟内检查Linux服务器性能
转自:http://www.infoq.com/cn/news/2015/12/linux-performance 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出L ...
- Apache服务器性能监控
Apache服务器性能监控 1.使用自带mod_status模块监控 1)加载mod_status.so 模块 在httpd.conf中打开LoadModule status_module modul ...
- JMeter 服务器性能监测插件介绍
简介 压力测试过程中,能够随时对负载服务器的健康状况的把控是相当重要的,有了这些数据,我们才能准确分析出服务器负载瓶颈.当你面对的是一个集群的时候,如果能了解到负载是否被正确分发,是不是一件很棒的事情 ...
随机推荐
- dubbo配置文件报错解决方案
下载dubbo.xsd 文件 在eclipse->window->perferences->XML Catalog->Add ->File system->选择刚才 ...
- HMI与设计模式
设计模式是做一个好的架构的一个基础.那么设计模式具体的概念是啥呢?百度百科曰:设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是 ...
- 数据源增量处理(Delta Proess)三大属性:Recod Mode、Delta Type、Serialization
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 《与小卡特一起学Python》Code1
print "I love pizza!" print "pizza " * 20 print "yum " * 40 print &quo ...
- Strus2第一次课:dom4j操作xml
先从底层的xml操作技术记录: 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素 import org.w3c.dom.Document; ...
- [MVC_Json序列化]Json字符串反序列化成C#对象
上一篇中有Json序列化相关问题得到了解决. 那么结果集为Json串时,如何将Json串转成C#对象呢? 现举例说明: -现有如下字符串数据 string k = "{\"ring ...
- system_call中断处理过程
张雨梅 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 1.给menuos添加命令 改 ...
- hdu 5587 Array
题目链接:hdu 5587 前两周 bc 上的题了,因为赶大作业所以没有去打,看了下官方给出的思路,感觉好强大~~竟然能转化成求二进制数 1 的个数: 然后数位 dp 就行了, #include< ...
- 【Java】多线程_学习笔记
多线程 1.进程 进程:当一个程序进入内存运行时,它就成为了进程.进程具有独立性.动态性.并发性. A.独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间 ...
- Table样式
.tb_org th { background-color: #; color: #ffffff; } .tb_org { border-right: 1px solid silver; border ...