文档

Windows系统内存分析工具的介绍

更新时间:

微软官方提供多种工具来分析Windows系统的内存使用情况,除了系统自带的任务管理器(Task Manager)、资源监视器(Resource Manager)、性能监视器(Performance Monitor),还有SysInternals工具,SysInternals工具如RAMMap和PoolMon,可以用来分析内存问题。本文简单介绍这些工具的使用方法,如果需要深入了解,请参考微软相关链接。

说明

本文档以Windows 2012为例,不同版本的操作系统界面略有差异,请您以实际操作系统界面为准。

任务管理器

Windows系统可以使用任务管理器进行内存监控,监控可以显示出详细的内存占用的进程。尤其是在性能中检查虚拟内存的使用情况,可以通过已提交虚拟内存(Committed Bytes)/虚拟内存上限(Commit Limit)查看使用情况。如果已提交虚拟内存非常接近上限,那么系统会出现性能问题。

  1. 远程连接Windows服务器。

  2. 在Windows桌面选择image > 任务管理器,打开任务管理器。

  3. 单击性能页签,在左侧单击内存,查看内存使用情况。

    image

资源监视器

在资源监视器(Resource Manager)中查看内存的使用情况,尤其是每个进程的使用情况。

  1. 远程连接Windows服务器。

  2. 在Windows桌面左下角的任务栏上的搜索框中,输入资源监视器,搜索并打开资源监视器。

  3. 单击内存页签,查看各个进程的内存使用情况。对于各个进程,请重点查看提交(KB)内存的大小,查看消耗内存较多的进程,并根据您的实际业务,判断此进程是否正常。

    image

    物理内存的使用包含以下几个部分。

    • 给硬件保留的内存。

    • 正在使用内存:由进程、驱动程序、操作系统使用的内存。

    • 已修改内存:内容必须写入磁盘才能用于其他用途的内存。

    • 备用内存:包含未使用的缓存数据和代码的内存。

    • 可用内存:不包含任何有价值数据,以及当进程、驱动程序、操作系统需要更多的内存时优先使用的内存。

    • 缓存:当文件被打开时,系统会把文件保存在缓存中,方便下次迅速读写。Windows 2008 R2及以后版本,对这个缓存的使用也做了限制,有一部分物理内存不会被缓存使用,保证系统即使在缓存过大的时候,也有可用物理内存,满足程序使用需求。

性能监视器

性能监视器(Performance Monitor)是用于Windows监控和收集系统资源消耗的重要工具。

  1. 远程连接Windows服务器。

  2. 在Windows桌面左下角的任务栏上的搜索框中,输入性能监视器,搜索并打开性能监视器。

  3. 在左上角选择监视工具 > 性能监视器,查看。

    性能监视器每秒采样1次系统各类资源。

    image

  4. 添加计数器并查看计数器的性能数据。

    快速添加计数器

    1. 如果您需要实时检查系统资源消耗的情况,单击image图标,根据界面提示添加指定的计数器。

      image

    2. 在性能监视器页面,查看添加的计数器的性能数据。

    用户自定义添加计数器

    1. 在左侧导航栏,选择数据收集搜集 > 用户定义

    2. 将鼠标悬浮在用户定义上,右键单击新建,根据界面提示按需添加计数器。

      例如:添加Logical Disk、Memory、System、Processor、 Process计数器,查看资源的实时运行情况,同时通过采样间隔来定义收集频率。例如,如果服务器有内存泄露问题,且很久才能复现,建议配置采样间隔为5秒;如果服务器经常出现CPU异常,建议配置采样间隔为1秒。

      image

    3. 在性能监视器页面,查看添加的计数器的性能数据。

RAMMap、Process Explorer和Poolmon

RAMMap

RAMMap是微软官方的内存分析工具。有时在任务管理器的监控窗口中查看不到占用内存异常的进程,但物理内存显示已经负载的状态,这种情况一般是系统底层有占用内存的情况,可以通过RAMMap工具查看任务管理器中不显示的系统占用内存。

Process Explorer

Process Explorer是微软的一款进程资源管理器,比Windows自带的任务管理器更加详细。您可以通过Process Explorer查看进程的详细资源占用情况,例如打开后也可以查看到进程的各类内存资源使用情况。

image

Poolmon

Poolmon是微软提供的一款免费工具。对于Windows内核而言,其两项核心的内存资源为非页面缓冲池和页面缓冲池,操作系统出现内存性能问题,很可能是内存资源消耗殆尽。虽然其他工具可以查看资源消耗的情况,但是如果需要定位到系统具体某个Pool Tag消耗的资源,需要使用Poolmon来定位。

检查perfmon日志来定位是哪个Pool Tag导致的资源消耗殆尽,例如,检查到IoDn Tag导致资源消耗完,通过如下命令定位到是SafeDogFileGuard.sys,而后通过修正该应用解决。

findstr /m /1 IoDn *.sys

系统显示类似如下。

image