使用RAMMap+PoolMon分析Windows内存使用异常问题

news2024/12/28 3:59:25

1 RAMMap和PoolMon工具简介

RAMMap和PoolMon都是微软Sysinternals的工具,前者可以从使用类型、页列表、进程、文件、优先级,以及物理地址来检查内存的使用情况,但是无法检查尚未提交和分页的进程内存使用情况;后者可以是作为RAMMap的补充,可以检查系统分页和非分页的缓冲池内存使用情况,并且提供了按照驱动程序的角度来查看其内存使用情况。

可以说RAMMap可以详细分析用户模式下进程的内存分配情况,但对于内核模式下的内存分配,还是要使用PoolMon来详细分析。

关于RAMMap的微软介绍:RAMMap - Sysinternals | Microsoft Learn

关于PoolMon的微软介绍:PoolMon - Windows drivers | Microsoft Learn

2 Windows内存分配说明

Windows操作系统使用来分配和管理内存,并将多个物理内存页组成一片虚拟地址空间,物理内存页是不连续的,而虚拟地址空间是连续的。应用程序正是使用了一片连续的虚拟地址来访问物理内存中不连续的内存页,并且由处理器完成虚拟地址和物理地址之间的转换。

处理器根据不同的应用程序代码在用户模式和内核模式些切换,用户模式运行的是notepad.exe、calc.exe这类应用程序,每个应用程序的虚拟地址空间都是独立的,称为“用户空间”,如果一个应用程序发生故障,其他应用程序和操作系统不受崩溃的影响;内核模式包含了核心系统组件和驱动程序,所有代码共享单个虚拟地址空间,称为“系统空间”,如果内核模式驱动程序发生故障,整个操作系统就会发生故障。

而在系统空间里面,又有两个可以动态分配内存的区域:分页缓冲池和非分页缓冲池,分页缓冲池的内存可以被调出到磁盘(发生swap),但是非分页缓冲池的区域是无法调出到磁盘(无法swap)一直占用着内存。

内核模式下的核心系统组件或者驱动程序可以同时使用分页缓冲池和非分页缓冲池的空间,记住如果使用了对于非分页缓冲区,则是固定在物理内存中,无法swap的。

 3 案例分享

有一台Windows Server 2016的服务器,运行在VMware vSphere虚拟化平台上,平台版本为6.7,每间隔1周左右,虚拟机就会出现内存异常增长,且通过操作系统自带的任务管理器、资源管理器均无法找到消耗内存的具体进程信息,并且也使用了杀毒软件进行扫描,没有发现异常程序。

  1. 虚拟化平台监控到内存异常增长。

  2. 任务管理器显示消耗最大内存空间的为dwm.exe进程,实际上才占用134252KB。

  3. 杀毒软件扫描结果,没有发现任何异常信息。

3.1 使用RAMMap分析内存的整体分配情况

RAMMap不需要额外安装,在RAMMap - Sysinternals | Microsoft Learn下载传到服务器上运行即可。

  1. 解压后在文件夹中找到RAMMap64(64位操作系统),双击打开。

  2. 发现99%的内存都被分配到了NonPaged Pool

结合前文对Windows内存的分配说明,Nonpaged Pool是属于内核模式下的系统空间,这篇区域的内存基本被操作系统的核心组件和驱动程序所使用,而那就需要使用PoolMon继续分析Nonpaged Pool的具体使用情况。

3.2 使用PoolMon分析非分页缓冲池的使用情况

PoolMon包含在Windows 驱动程序工具包 (WDK) 的 \Tools\Other 子目录中,微软并没有提供单独的工具下载,而WDK工具的安装需要联网,服务器又处于内网环境无法访问互联网。后面经过测试,可以找一台可联网的机器安装WDK工具,在WDK安装目录下的\Tools\x64 子目录找到poolmon.exe拷贝出来,例如我安装到了C:\Program Files (x86)\Windows Kits\10\Tools\x64目录下。

接下来就是使用PoolMon分析非分页缓冲池的详细使用情况了:

  1. 打开cmd,在poolmon.exe所在目录,直接执行.\poolmon.exe -p -b,可以看到消耗最多内存空间是VFil和VNet。(这里因为显示不全,暂不)

  2. 检查操作系统补丁情况,发现只有安装操作系统时自带的补丁,未再安装其它更新。

  3. 检查虚拟化平台的BUG情况,暂未发现直接关联的,但是在一篇KB(https://kb.vmware.com/s/article/2077302)中找到了关联的问题,VFil和VNet可能是VMware Tools的驱动,并且要求升级VMware Tools到10.0.8以上,而虚拟机所安装的VMware Tools版本是12.0.0,故基本可以排除是这个BUG。

我们已经通过PoolMon定位到消耗内存资源的罪魁祸首是vFIL和vNET,由于VMware Tools的版本比KB中说明的版本要高,暂不考虑升级VMware Tools。

由于该问题是可复现的(基本上运行了一周左右就会出现这个情况),沟通处理该问题的解决方案时,采用了排除法:

  1. 考虑先对操作系统安装最新的补丁。
  2. 如果操作系统补丁无效,则说明不是由于操作系统自身原因,再考虑升级VMware Tools。

最后通过观察,确认是安装了当时操作系统最新的补丁后解决了这个问题。

总结:工欲利其事,必先利其器。需要对所解决的事情涉及的理论和内容有一定的了解,才能够正确地使用工具来解决问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/920858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用haproxy搭建web架构

haproxy HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。 HAProxy提供了可以在七层和四层两种负载均衡能力,它可以提供高可用性、负载均衡、及基于TCP和HTTP应用的代理。适用于负载大的Web站点,在运行在硬件上可…

使用 SQLStudio 进行数据库管理并通过 Docker Compose 进行部署

在现代软件开发中,数据库管理是一个至关重要的环节。SQLStudio 是一个强大的工具,可以帮助开发人员轻松管理数据库,现在改名成SQLynx,我们用的是旧的镜像,本文还是用SQLStudio这个名称。同时,使用 Docker C…

Qt双击某一文件通过自己实现的程序打开,并加载文件显示

双击启动 简述方法一方法二注意 简述 在Windows系统中,双击某类扩展名的文件,通过自己实现的程序打开文件,并正确加载及显示文件。有两种方式可以到达这个目的。 对于系统不知道的扩展名的文件,第一次打开时,需要自行…

ModaHub魔搭社区:WinPlan企业经营垂直大模型数据建模(二)

目录 维度模版管理 录入维度数据 经营指标 创建经营指标 经营指标管理 维度模版管理 创建维度后,可在维度库的左侧栏展示全部启用中的维度,你也可以再次编辑维度模版;如不再需要该维度,可停用,停用后可在停用管理里重新启用或删除。 1)停用:维度停用后,不会出现在…

3个方法学会:恢复指定人微信聊天记录

和朋友吵架后一怒之下把她微信删除了,和好之后又想把聊天记录恢复回来。网上很多方法都是直接恢复所有的微信聊天记录,我想问问,可以只恢复这个朋友的聊天记录吗?有什么方法吗? 朋友之间有一些小摩擦、小争吵是很正常的…

MyCAT命令行监控

9066端口 ,用mysql命令行连接 Mysql –utest –ptest –P9066 show help 可显示所有相关管理命令 显示后端物理库连接信息,包括当前连接数,端口 Show backend Show connection 显示当前前端客户端连接情况,已经网络流量信息、…

JavaFX:根据控件内容显示tooltip

如题。当控件为空,没有内容时显示tooltip,反之不显示。示例如下: package ch06;import javafx.application.Application; import javafx.application.Platform; import javafx.beans.value.ObservableValue; import javafx.geometry.VPos; i…

如何将下载的安装包导入PyCharm

1. 下载安装包 这里以pyke为例。下载好之后解压缩,然后放入/Lib/site-packages/pyke-1.1.1 2. 打开PyCharm的终端进行安装 python setup.py install 3. 安装好之后导入即可使用 import pyke

Linux搭建SSLVpn

安装http、ssl服务 编辑http配置文件 修改http的136行,276行以及990行 1、136行将监听端口注释 2、276行和990行修改为自己的域名和要访问的端口 修改http文档最后那部分 新添ssl配置信息,将端口修改为443(截图错了server.key应该放在/etc/…

单片机的串口通信

今天,完整地总结一下普中科技的单片机的串口通信的硬件与编程,记录一下以后如果需要也比较方便捡起来。 单片机的串口部分的电路图。开发板上集成了 1 个串口通信电路,是 USB 转串口模块,它既可下载程序也可实现串口通信功能。 对…

【面试题】UDP和TCP有啥区别?

UDP UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就…

【C++STL基础入门】vector增、删操作

文章目录 前言一、vector迭代器1.1 定义vector迭代器1.2 注意点 二、vector增函数2.1 尾添加示例代码&#xff1a; 2.2 中间添加2.3 效率问题 三、vector删除操作3.1 尾删除3.2 删除指定元素3.3 删除所有 总结 前言 一、vector迭代器 1.1 定义vector迭代器 vector<int>…

30款教育学习类应用评测体验报告

为方便开发者更好地衡量APP在同类产品中的表现和竞争力&#xff0c;有针对性地进行产品优化&#xff0c;软件绿色联盟策划了垂类APP评测体验专题&#xff0c;目前已发布了天气类APP和小说类APP评测体验报告&#xff0c;本期将对教育学习类APP围绕绿标五大标准进行体验评测&…

流程控制之条件判断

一、if单分支结构 准备知识&#xff1a; 查看系统内存&#xff1a;free指令 -m表示以MB的大小显示 mem是系统内存&#xff0c;swap是虚拟内存&#xff0c;需要将系统剩余内存大小过滤出来&#xff0c;之后与100M对比 也可以用awk指令 使用正则表达式过滤&#xff0c;以空格…

vue 简单实验 自定义组件 component

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"components-demo"><button-counter></button-counter> </div> <script> // 创建一个Vue 应用 const ap…

【MySQL】1、MySQL数据库的基本概念

数据库的基本概念 1.数据 1&#xff09;描述事物的符号记录称为数据&#xff1b;数字&#xff0c;文字&#xff0c;图形&#xff0c;图像&#xff0c;声音&#xff0c;档案记录等都是数据 2&#xff09;数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是杂乱…

c++都补了c语言哪些坑?

目录 1.命名空间 1.1 定义 1.2 使用 2.缺省参数 2.1 概念 2.2 分类 3.函数重载 4.引用 4.1 概念 4.2 特性 4.3 常引用 4.4 引用和指针的区别 5.内联函数 1.命名空间 在 C/C 中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将…

像Vuex一样使用redux

redux基础知识 本篇文章主要介绍redux的基本使用方法&#xff0c;并简单封装&#xff0c;像vuex一样写redux 学习文档 英文文档: https://redux.js.org/ 中文文档: http://www.redux.org.cn/ Github: https://github.com/reactjs/redux redux是什么 redux和vuex几乎是一…

EasyExcel实现多sheet文件分批导入

文章目录 EasyExcel引入依赖表结构学生表课程表教师表 项目结构DozerUtils工具类实体类StudentCourseTeacher Controller监听类StudentListenerCourseListenerTeacherListener ServiceEasyExcelServiceStudentServiceCourseServiceTeacherService ServiceImplEasyExcelServiceI…

入行嵌入式,未来能干啥?

嵌入式技术近些年来发展迅猛&#xff0c;已经广泛应用于各个领域。那么&#xff0c;如果选择入行嵌入式&#xff0c;未来能够从事哪些有趣且有前景的工作呢&#xff1f; 1. 智能家居领域 随着物联网技术的快速发展&#xff0c;智能家居成为了人们追求便利和舒适的新时尚。作为嵌…