zoukankan      html  css  js  c++  java
  • 一次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,一大堆结果,尤其下面几篇文章,说的非常好:

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

    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:windowssystem32drivers
    
    //这个命令出来很多乱码,一开始以为是mrxsmb组件有问题,但网上一搜没东西,hotfix也是针对win2012的
    findstr /s VNet *.sys 
    mrxsmb.sys
    mrxsmb10.sys
    mrxsmb20.sys
    
    //去掉了很多类似的结果,这样显示清晰的多,看下来vnetflt.sys更可疑,这是个管理虚机的驱动
    strings * | findstr VNet 
    c:WindowsSystem32driversmrxsmb.sys: Active VnetRoots-- %x VNetRoot %p
    c:WindowsSystem32driversmrxsmb10.sys: Callback rdbss for create VNetRootCtxt
    c:WindowsSystem32driversmrxsmb20.sys: MRxSmbCreateVNetRoot
    c:WindowsSystem32drivers
    dbss.sys: RxCreateVNetRoot
    c:WindowsSystem32driversvnetflt.sys: VNet
    c:WindowsSystem32driversvnetflt.sys: VNet3
    c:WindowsSystem32driversvnetflt.sys: VNetH
    

    2.3 搜解决方案

    vmware的KB里找到一篇相关的,说是暂时没有解决方法,但是有个workaround可以禁用这个驱动:在注册表里设置Start = 4。

    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesvnetflt]
    Start=4
    

    记得先备份reg,然后重启,观察3-5天,nonpaged不涨的话就OK了。

  • 相关阅读:
    Git 快速入门
    【工具软件】-Win10 应用软件找不到映射网络驱动器的解决方法
    Java笔记(十五)……面向对象IV多态(polymorphism)
    Java笔记(十四)……抽象类与接口
    Java笔记(十三)……面向对象III继承(inheritance)
    Java笔记(十二)……类中各部分加载顺序及存放位置问题
    Java笔记(十一)……单例设计模式
    Java笔记(十)……面向对象II封装(Encapsulation)
    Java笔记(九)……面向对象I
    Java笔记(八)……数组
  • 原文地址:https://www.cnblogs.com/AlexanderYao/p/5729840.html
Copyright © 2011-2022 走看看