VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程

VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程

  • [VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程](#VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程)
    • [1. 如何启动 VMMap(正确姿势)](#1. 如何启动 VMMap(正确姿势))
    • [2. 选择要分析的进程](#2. 选择要分析的进程)
      • 怎么选目标进程?给你三类常见策略:
        • [策略 A:我就想分析内存暴涨的那个进程](#策略 A:我就想分析内存暴涨的那个进程)
        • [策略 B:我想分析登录用户自己的工作区](#策略 B:我想分析登录用户自己的工作区)
        • [策略 C:我要看系统级核心进程/高权限进程](#策略 C:我要看系统级核心进程/高权限进程)
    • [3. 常见问题:为什么我点进程会报"访问被拒绝"?](#3. 常见问题:为什么我点进程会报“访问被拒绝”?)
      • [情况 1:权限不够](#情况 1:权限不够)
      • [情况 2:进程属于别的会话](#情况 2:进程属于别的会话)
      • [情况 3:进程瞬时退出](#情况 3:进程瞬时退出)
    • [4. 附加成功后你会看到什么界面?](#4. 附加成功后你会看到什么界面?)
      • [4.1 内存类型汇总表(表格区,核心区)](#4.1 内存类型汇总表(表格区,核心区))
      • [4.2 图形视图(饼图/条图)](#4.2 图形视图(饼图/条图))
      • [4.3 底部或子标签页:区域细节 / 时间线快照](#4.3 底部或子标签页:区域细节 / 时间线快照)
    • [5. 进程选错了?可以切换吗?](#5. 进程选错了?可以切换吗?)
    • [6. 初次抓取后要做的第一件事:保存快照](#6. 初次抓取后要做的第一件事:保存快照)
    • [7. 实战建议小抄](#7. 实战建议小抄)
    • [8. 本篇小结](#8. 本篇小结)

VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程

这篇是一个"上手即实战"的章节,我们会解决四个最关键的问题:

  1. VMMap 要怎么启动,32 位 / 64 位有没有讲究?
  2. 附加到哪个进程,系统进程和普通业务进程有什么差别?
  3. 为什么有时候提示 Access Denied(访问被拒绝)?怎么提权?
  4. 进入进程后,那些花花绿绿的内存表格和饼图,代表什么"初始状态"?

如果你能把这一章都做到,基本就已经具备"抓现场证据"的能力了,后面章节就是在这个基础上做分析、对比和报告。


1. 如何启动 VMMap(正确姿势)

步骤非常简单:

  1. 解压 Sysinternals 套件中的 vmmap.exe
  2. 双击运行 vmmap.exe(建议右键 → 以管理员身份运行)。
  3. 第一次启动会弹出 EULA(许可协议),点 Accept 即可。

要注意的两个点:

32 位 vs 64 位
  • 在 64 位 Windows 上,你通常会拿到一个 64 位 VMMap。
  • 它可以分析 64 位进程,也可以分析大多数 32 位进程(WOW64 进程)。
  • 但在极少数场景下,分析不同架构的进程可能受限,比如特别受保护的系统服务。遇到权限报错别慌,后面说提权方法。
建议直接管理员启动
  • 不是所有进程都能用普通用户权限读取,比如 lsass.exe、系统服务、杀软内核代理进程。
  • 如果你只是调业务进程(例如你自己写的服务、浏览器、游戏客户端等),普通权限往往也行。
  • 如果你是做内存审计/取证/应急,那请直接"以管理员身份运行"。

👉 小结一句:平时调业务可以普通启动,做安全/深度定位请直接管理员启动。


2. 选择要分析的进程

启动 VMMap 之后,第一屏通常不是图表,而是一个"Select Process(选择进程)"窗口,列出系统当前正在运行的所有进程。

你会看到几列典型字段:

  • 进程名(例如 chrome.exesqlservr.exeexplorer.exe
  • PID(进程 ID)
  • 位数(32-bit / 64-bit)
  • 用户(哪个账号在运行)
  • 命令行(启动路径或参数,有时可以看出该进程用途,比如是哪个实例)

怎么选目标进程?给你三类常见策略:

策略 A:我就想分析内存暴涨的那个进程
  • 打开任务管理器,按内存排序,记下那个进程的名字和 PID。
  • 回到 VMMap → 找到同名/同 PID 的进程 → 双击。
  • 这是"服务内存泄漏定位"的常规入口。

适用:后端服务、图形程序、浏览器某个标签页进程、Electron 应用等。


策略 B:我想分析登录用户自己的工作区
  • 典型对象:explorer.exe(桌面/外壳)、Teams.exeWeChat.exeDiscord.exePhotoshop.exe
  • 这种通常运行在当前交互式用户会话下,权限也更好拿到,无需太多提权。

适用:排查"这软件为什么一开就占 2GB"。


策略 C:我要看系统级核心进程/高权限进程

例如:

  • svchost.exe 某个实例(承载很多系统服务)
  • 安全软件的 agent 进程
  • 驱动层配套的用户态守护进程
  • 数据库或关键业务守护进程(运行在 LocalSystem / 服务账户下)

这种往往是管理员视角,而且很可能是你作为运维/应急人员被叫去救火的那种场景。

⚠️ 这种情况下,普通权限常会直接报:

  • Access Denied / 无法附加
  • 无法读取进程内存

解决方式详见下一节"权限问题"。


3. 常见问题:为什么我点进程会报"访问被拒绝"?

这是新手第一次用 VMMap 时 100% 会遇到的坑。

原因通常有三类:

情况 1:权限不够

  • 系统服务、杀软、防护类进程、LocalSystem 级别的后端服务,普通用户没有权利随意读它们的内存空间。
  • 解决:右键 VMMap → 以管理员身份运行 → 再选该进程

管理员权限 ≠ SYSTEM 权限,但足以处理绝大多数业务/服务类进程。极少数高强度防护进程(如 EDR Agent)可能依然拒绝访问,这是安全策略,不是你错了。


情况 2:进程属于别的会话

  • Windows 存在多会话:服务在会话 0,普通用户在会话 1/2/...
  • 某些情况下,你当前用户不在同会话,读不到别的会话的内存。
  • 管理员权限会极大缓解这件事。

情况 3:进程瞬时退出

  • 你刚点它,它就崩了 / 重启了 / 被回收了,VMMap 自然拿不到。

  • 典型例子:短命的辅助进程、崩溃自重启服务、浏览器子进程。

  • 解决:

    • 重新打开进程列表
    • 尽快选中主进程(例如浏览器主进程,而不是临时子进程)
    • 或者在"问题刚发生时"立刻抓快照(后面章节会讲快照的意义)。

4. 附加成功后你会看到什么界面?

一旦 VMMap 成功附加到进程,你会看到主界面,大致由三块组成(界面略有版本差异,但逻辑一致):

4.1 内存类型汇总表(表格区,核心区)

这是 VMMap 的灵魂。你会看到一行行类似:

  • Private Data / Private Bytes
  • Heap
  • Stack
  • Image
  • Mapped File
  • Shareable
  • Free
  • ...

每一行后面会有很多列,比如:

  • Total Size(虚拟地址空间大小)
  • Committed(提交量)
  • Private(私有)
  • Working Set / WS(当前驻留物理内存)
  • Shareable / Shared(这块内存是否与其他进程共享)
  • ...等等

这一屏就是你在做"这进程到底吃到哪去了"的大方向判断。

举例:

  • Heap 占比极大 → 业务逻辑(申请内存后没释放,典型内存泄漏)
  • Stack 很多 → 线程太多,线程没回收
  • Mapped File 巨大 → 这个进程疯狂映射了外部资源(贴图/视频帧/模型/日志/数据库页)
  • Image 巨大 → 装载了大量 DLL / 模块,比如浏览器插件、DirectX 组件、图形/AI 加速模块等

4.2 图形视图(饼图/条图)

通常会给你一眼直觉:这个进程的内存使用结构像不像"堆怪兽"。

  • 如果一大块都是 Private/Heap,那通常是程序自己不停 malloc/new(或 .NET/Java 大对象分配)。
  • 如果映射类内存(Mapped File)占优势,那可能是资源型程序(浏览器、大型游戏、音视频/渲染管线、数据库缓存)。

这是特别适合在汇报/复盘PPT里截图的一块。


4.3 底部或子标签页:区域细节 / 时间线快照

  • 你可以切到详细视图,看到具体地址区间(Base Address、Size、Protection、Type)。
  • 你也可以拍"快照"(Snapshot),然后后面比较两次快照的差异。

别急,快照和时间对比我们下一章会详细讲(内存时间线 & 快照对比是 VMMap 的隐藏杀器,用于证明"它在涨")。


5. 进程选错了?可以切换吗?

可以。

在菜单里(通常是 File → Select Process... 或者工具栏上类似"Open Process"按钮),你可以回到进程列表重新选择目标,而不用重启 VMMap。

实际使用中这很方便,比如:

  • 先看浏览器主进程,
  • 再切到游戏客户端进程,
  • 再切到后端服务进程,
  • 最后对每个进程都做一个快照留存,做横向对比。

建议你操作时关掉"会频繁重启/瞬时退出"的进程,优先分析稳定进程,减少"刚切过去就没了"的挫败感。


6. 初次抓取后要做的第一件事:保存快照

这是很多人忽略但真的很关键的一步。

为什么现在就要保存?

  • 当前状态 = 现场证据。
  • 如果你的目标是"抓内存泄漏",你要有 T0(现在)这个基线,后面过 5 分钟 / 30 分钟 / 两小时 再来拍 T1/T2/T3。
  • 没有 T0,你后面就没法证明"它在涨"。

在 VMMap 里你可以用菜单(一般是 Save、Snapshot、Save Snapshot 等字样)导出当前状态为一个 .mmp/.vmmap(不同版本扩展名可能略有差别)文件。

这些快照文件后续都能重新加载,做对比分析。

翻译成人话:点一次保存,就等于把"这个进程此时此刻的内存账本"封存成证据。


7. 实战建议小抄

最后我给你一套我平时真实用的流程模板,拿去就能干活:

  1. 以管理员身份启动 VMMap

    避免后面各种 Access Denied。

  2. 选择高内存进程(或嫌疑目标进程)

    参考任务管理器 / 报告的 PID。

  3. 观察汇总表:哪一类最大?

    • Heap?→ 业务分配 / 泄漏嫌疑
    • Stack?→ 线程风暴
    • Mapped File?→ 资源贴图 / 文件映射
    • Image?→ 模块爆炸(插件、驱动级组件过多)
  4. 立刻保存快照,标记为 T0

    命名建议:processname_PID_timestamp.mmp

    例如:GameClient_1234_2025-10-25-14-32.mmp

  5. 隔一段时间再拍 T1 / T2

    如果 Heap 一直长,那你可以非常硬地告诉研发:"不是 OS 问题,是你们堆一直在涨。"

  6. 把图形饼图 + 堆/映射/栈分布截图

    这是汇报材料、复盘 PPT、问题工单 的黄金素材,领导和开发都能一眼看懂。


8. 本篇小结

到这里,你已经能做三件超实用的事了:

  • 把 VMMap 正确启动并指到一个进程(尤其是大内存嫌疑进程)。
  • 用管理员权限避免"访问被拒绝"阻碍调查。
  • 在第一次接触目标进程时就留存一个"内存状态快照",为后续的泄漏分析打下基准线。

下一篇我们会写:
VMMap 学习笔记(8.3):VMMap 主界面详解------内存类型、指标含义、颜色块怎么看?

也就是把你刚刚看到的那张大表,彻底读懂。

看懂那张表之后,你就能开始写"这是内存泄漏"的结论,不再只是"我觉得它占用有点高"这种没说服力的主观看法。

相关推荐
蓝桉~MLGT2 小时前
Python学习历程——模块
开发语言·python·学习
浪漫血液&2 小时前
Linux基础指令(简易版)
linux·服务器
云计算老刘2 小时前
1. Cockpit 管理服务器;2. Linux 软件包管理
linux·运维·服务器·云原生·云计算
谅望者3 小时前
数据分析笔记02:数值方法
大数据·数据库·笔记·数据挖掘·数据分析
IT19953 小时前
Wireshark笔记-DNS流程与数据包解析
笔记·测试工具·wireshark
一匹电信狗3 小时前
【C++11】Lambda表达式+新的类功能
服务器·c++·算法·leetcode·小程序·stl·visual studio
say_fall3 小时前
C语言编程实战:每日刷题 - day 1
c语言·开发语言·学习
小苏兮3 小时前
【把Linux“聊”明白】进程的概念与状态
linux·运维·服务器·学习
♛小小小让让3 小时前
python logging模块:专业日志记录
笔记·python