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,一大堆结果,尤其下面几篇文章,说的非常好:

接下去的诊断过程,基本是参照这几篇来的。

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问题的诊断的更多相关文章

  1. db服务器参数优化

    1.swap分区 swap作用是在系统内存不够的情况下,当做临时的内存使用. swap是在硬盘上,性能肯定没有再内存好,当系统内存使用超过40%的时候, swap会可能被使用,而系统一旦使用swap会 ...

  2. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

  3. DB服务器中的参数优化

    1.swappiness 禁止系统使用swap空间,配置/etc/sysctl.conf中的vm.swappiness=0 2.Scheduler调度 Scheduler调度,指的是磁盘的IO调度算法 ...

  4. 转贴---Linux服务器性能评估

    http://fuliang.iteye.com/blog/1024360 http://unixhelp.ed.ac.uk/CGI/man-cgi?vmstat ------------------ ...

  5. 检查Linux服务器性能

    如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在? 概述通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. • uptime• ...

  6. 我为什么很烦在DB服务器上安装杀毒软件

    常见的数据库连接问题无外乎是在数据库服务器本地可以连接SQL Server,但通过其他服务器就不可以连接.但这次我却碰到了相反的情况,在服务器本地无法通过IP/实例名连接,但从其他服务器却可以.而且每 ...

  7. 用十条命令在一分钟内检查Linux服务器性能

    转自:http://www.infoq.com/cn/news/2015/12/linux-performance 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出L ...

  8. Apache服务器性能监控

    Apache服务器性能监控 1.使用自带mod_status模块监控 1)加载mod_status.so 模块 在httpd.conf中打开LoadModule status_module modul ...

  9. JMeter 服务器性能监测插件介绍

    简介 压力测试过程中,能够随时对负载服务器的健康状况的把控是相当重要的,有了这些数据,我们才能准确分析出服务器负载瓶颈.当你面对的是一个集群的时候,如果能了解到负载是否被正确分发,是不是一件很棒的事情 ...

随机推荐

  1. JavaScript parseInt() 函数

    定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 语法 parseInt(string, radix) 参数 描述 string 必需.要被解析的字符串. radix 可选.表 ...

  2. .zip版初次安装mysql时遇到的my.ini、服务无法启动以及设置登录密码的问题

    下载mysql出现的问题 若下载的是.zip版,就是免安装的直接解压就可以的出现的问题 一.需要在E:\mysql\mysql-5.7.14-winx64目录下手动添加my.ini文件(.ini文件是 ...

  3. ChartControl 折线图 柱状图

    添加折线图(柱状图) 拖动ChartControl到Form上 在Series Collection中添加Line(或Bar) DevExpress.XtraCharts.Series series1 ...

  4. 机电传动控制 PLC梯形图编程练习

    交通灯控制 在如下图的场景中,打开SW1开关后,交通灯控制器开始工作,关闭SW1则控制器停止工作. 梯形图: 仿真结果: 可以满足所需要求. 输送带控制 输送带场景如下图: 梯形图: 仿真结果: 满足 ...

  5. JAVA 冒泡算法

    每种语言都有冒泡JAVA实现如下: public static void main(String args[]){ System.out.println("Start"); int ...

  6. [原]Linux ssh远程连接断开问题处理办法

    我们在通过远程连接操作Linux server的时候,有可能过一段时间忘记操作,便会发生ssh断开的问题. 而如果是本地的server,比较好办,直连设备kill掉ssh,踢掉无效用户连接,再次链接即 ...

  7. TLD目标跟踪算法

    1. 简介 TLD目标跟踪算法是Tracking-Learning-Detection算法的简称.这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出.TLD将传统的视频跟 ...

  8. Struts2 简介

    回顾Struts2的使用过程,网上搜的教程多多少少都会有点问题,重新记录下创建过程,方便查阅. 1.下载Struts2的jar包 下载地址:http://archive.apache.org/dist ...

  9. 《C++ Primer》学习笔记【第一部分 C++基础】

    第2章  整型的赋值:当我们试着把一个超出其范围的值赋给一个指定类型的对象时,结果如何?答案取决于类型是signed还是unsigned的.对于unsigned,编译器会将该值对unsigned类型的 ...

  10. 转:OSGI 实战 Equinox

    http://download.csdn.net/detail/ifmliuzhen/3231590