内存泄漏

 

一次故障解决过程

    平台:Window 2003 R2 SP1

    故障描述一:客户反映数据库服务器每隔几天时间,客户端就无法连接,提示监听程序无法解析专有服务器进程。

    处理步骤一:首先判断是否是由于OracleSGA分配过大导致用户无法创建新的连接,检查操作系统得/3GB参数、OracleSGA参数和客户端连接数,可以初步排除不是由于SGA分配过大导致的用户无法创建新的连接

    故障描述二:在跟踪案例细节时,客户反映故障发生时有时任务管理器都无法打开

    处理步骤二:任务管理器无法打开可能是由于病毒引起,但是数据库服务器从来不会安装运行新的软件,而且也安装了瑞星杀毒软件,应该可以排除病毒原因,继续检查系统核心内存,发现系统核心未分页内存数在故障时达到120M,而且启动时仅30M左右,未分页内存120M左右已经到达操作系统的限制了,因此可以断定Oracle无法创建新的连接和任务管理器无法打开的原因都在于此。

    处理步骤三:已经确定由于是无法分配未分页内存导致的故障,下一步就应该查找究竟是什么程序持续占用了系统未分页内存。这里使用Windowspoolmon工具来进行监视。

运行poolmon发现三个可以的tag分别是 Ddk Mmcmr100 ,这三个tag都占用了较大的未分页内存(10M)。重新启动服务器后,再次运行poolmon观察到Mmcmr100在启动时就占用了较大的未分页内存,与故障时相比变化不大,可以排除。Ddk在启动时时仅占用600K左右的内存,可以断定Ddk发生了内存泄漏。

    处理步骤四:确认Ddk究竟是什么咚咚,这里借鉴了网上同仁的处理经验,在此表示感谢。

         检查pooltag.txt 看到 Ddk  - - Default for driver allocated memory (user's of ntddk.h) 说明Ddk是由驱动程序使用

         搜索使用Ddk使用的驱动程序(再次感谢网上同仁提供的思路)

              findstr /s /m /l "Ddk" c:\windows\system32\drivers\*.sys  返回四个结果

              basetdi.sys  ipvw32.sys storport.sys wdf01000.sys 其中后三个是Windows自身的驱动,basetdi.sys 为瑞星驱动

    故障描述三:Windows自身驱动可能性极小因此可以暂时排除,重点放在瑞星驱动上。有了目标后再次跟踪,观察到在晚上当系统空闲时未分页空间的大小基本不会增长,而白天系统繁忙时未分页空间的大小有着明显的增长。

    处理步骤五:联想到和瑞星驱动相关的,一个是本地I/O被瑞星影响,一个是网络IO被瑞星影响,而这些都和瑞星实时监控相关。于是停止瑞星实时监控,运行poolmon观察到Ddk的值不再增长,在此确认是由于瑞星引起的内存泄漏。

    结果:由于服务器上极少去做操作,运行瑞星实时监控的必要性不大,因此建议用户先停止瑞星实时监控以解决这个问题,然后联系瑞星公司处理

 

工具poolmon.exe说明(XP下可以用memsnap工具)

1.  使能Tag模式

在使用poolmon之前,你必须使能Tag模式并重新启动服务器。池Tag的特性是将收集和计算的信息通过分配内存的Tag值进行排序。

注:使用Windows 2003 服务器不需要使能Tag,它是Windows 2003的默认值

方法一:编辑注册表

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager 下增加键 GlobalFlag 0x00000400(十六进制);

重新启动计算机。

方法二:使用 Gflags.exe 工具

运行 Gflags.exe 工具选择 Enable Pool Tagging

2.  使用 poolmon.exe 工具收集信息

    使用以下步骤复制和存储Tag信息,以间隔15分钟的方式统计2小时,添加信息到文本中。

1.  运行Windows 工具包中的程序poolmon.exe

2.  P 显示未分页池

3.  B 按字节大小排序

4.  每十五分钟保存一次屏幕内容

     在数据收集结束后,分析Tag信息看看是否存在分配尺寸持续增长

附:poolmon.exe命令说明:

     语法:poolmon [itag][xtag][swtich]

itag 列出匹配 Tag 名的池,可以使用通配符 *

xtag 列出不包含 Tag 名的池,可以使用通配符 *

swtich:

    P - 切换显示未分页或显示已分页或两者都显示

    L  - 切换是否高亮显示值有变化的行

    E - 在数据的底部显示池合计值

    H/? - 帮助

    Q - 退出

    T - 按 Tag 名排序

    A - 分配尺寸 排序

    F - 按 空闲尺寸 排序

    D - 按 分配和空闲的差 排序

    B - 按 使用字节 排序

    M - 分配字节 排序

    列说明:

Tag:池分配的4字节Tag

Type:分页或未分页

Allocs:所有分配的计数

():分配列中与上次更新的差异

Frees:所有空闲的计数

():空闲列中与上次更新的差异

Diff:(Allocs - Frees

Bytes:池消耗的合计字节数

():字节列中与上次更新的差异

Per Alloc:(Bytes/Diff

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4670/viewspace-351828/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4670/viewspace-351828/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值