zoukankan      html  css  js  c++  java
  • 未分页内存泄露

    未分页内存泄露导致虚拟机概率性僵死

    搜狗高速浏览引起未分页内存泄露导致虚拟机概率性僵死

    适用版本(必选)

    Null

    以XP系统为例。

    现象描述(必选)

    XP虚拟机经常概率性无法登录,即使虚拟机启动后,不进行任何操作,经过3天左右,无法登录,需要强制重启解决。

    告警信息(可选)

    该故障无伴随告警产生。

    原因分析(必选)

    虚拟机经常概率性无法登录,可能是由于系统故障引起,通过查看系统日志,发现有未分页内存不足,是由于操作系统未分页内存泄露一起。

    处理过程(必选)

    1. 通过VNC登录该部分虚拟机,发现虚拟机任务管理器无法打开,在命令行中执行ping命令无法执行;
    2. 查看系统日志,发现系统日志有srv 1029错误;
    3. 重启虚拟机后,未分页内存,只有11M左右,监控未分页内存,发现未分页内存一直处于增长状态,如图所示,已经增加至142M。
    4. 通过XP系统自带的perfmon工具监控进程未分页内存增长,发现并没有进程异常情况;因此,可以断定该问题是由于驱动内存泄露引起。
      • 操作方法:
      1. 开始-运行,输入perfmon后回车,即可打开perfmon.exe。
      2. 在perfmon.exe的左窗格中,单击“性能日志和警报”,右键,选择,新建“性能计数器”。
      3. 在计数器的性能对象Process,计数器选择Pool Nonpaged Bytes和Pool Paged Bytes,采样间隔设置为15s
      4. 观测一段时间后(几个小时或者一天),可以通过 perfmon中的性能监控器,点击“+”,选择之前的日志文件,默认路径:C:PerfLogs,查看是哪个进程的未分页内存增长。
      5. 发现并没有进程异常情况;因此,可以断定该问题是由于驱动内存泄露引起。
    5. 通过poolmon.exe工具,监控导致未分页内存泄露的应用程序。
      • 操作步骤:
        1. 启用池标记。
          在运行之前PoolMon,必须启用池标记,然后重新启动计算机。标记功能池收集,并计算有关内存分配的标记值按排序的池内存统计信息。注意:在Windows Server 2003中池标记是默认启动的,所以不需要手动启用。 Windows XP的计算机中,可以使用编辑注册表或Gflags.exe工具启用池标记,在此只介绍编辑注册表方法。
          1. 运行中,输入regedit,运行注册表编辑器。在注册表中找到下面的项:HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession管理器,将值更改为0x00000400的十六进制。
          2. 重新启动虚拟机。
          3. 注意完毕后调试,请重复以上步骤以禁用pool tagging。
        2. 使用Poolmon收集信息。Poolmon.exe是在Windows NT 4.0资源工具包和Windows 2000、Windows XP和Windows服务器2003 Cd-rom的SupportTools文件夹中可用。Poolmon可显示在命令窗口中的池标记信息。使用箭头键或向上一页和PAGE DOWN键以显示所有工具返回的标记信息。
          1. 打开Poolmon.exe,按P,按B。其中P表示监控未分页内存,B表示按字节大小排序,其他命令请参考poolmon.exe的帮助。
          2. 虚拟机刚启动时,未分页内存较小,在处理的问题中,运行一段时间后,可以明显发现Tag为gsmi的程序Nonp持续增长,驱动一般在C:windows目录下,但是在该目录下为查找到标记为gsmi的驱动,然后通过搜索C:program files搜索,发现该驱动位于搜狗浏览器安装目录下,标签为gsmi的驱动内存泄露,通过搜索发现该驱动是由“搜狗高速浏览器”。注:应用程序会在系统驱动文件中打上标签,如果打开sogouqosxp.sys文件,可以看到gsmi标记。
    6. 卸载该浏览器后,gsmi的驱动调用不存在,并且未分页内存处于稳定状态,问题解决。

    参考信息(可选)

    NonPaged Pool,未分页池,一旦加载到该池就始终驻留在物理内存中。任何进程都可以访问到未分页池,NonPaged在WinXP x86系统中最大只允许256MB(在boot.ini中带/3GB参数启动的OS,NonPaged最大值为128MB)

    建议与总结

    对于应用程序导致的操作系统未分页内存泄露问题,可以通过微软的perfmon.exe和poolmon.exe工具检测,检测到问题根源后,一定要卸载该应用程序,选择替代品。

  • 相关阅读:
    例程 | 串口助手Comm Assist
    教程 | 蓝牙设备查找类CxBthRadio & CxBthRadioFind
    教程 | 服务端套接字类CxServerSocket
    openlayers 3加载GeoServer发布的wfs类型服务
    Geoserver端口冲突解决方案(二)
    Geoserver端口冲突解决方案
    GeoServer基础教程(四):空间数据互操作的接口规范WMS、WFS和WCS
    GeoServer基础教程(三):部署发布Shapefile地图数据
    GeoServer基础教程(二):GeoServer的Web管理界面快速入门
    GeoServer基础教程(一):环境搭建篇
  • 原文地址:https://www.cnblogs.com/Areas/p/14055878.html
Copyright © 2011-2022 走看看