码龄 5 年后,我是如何用 Process Explorer 系统化解决 Windows 疑难杂症的
摘要 Process Explorer是Windows系统排查疑难杂症的强大工具,相比任务管理器能提供更深入的进程分析。它可查看完整的进程树关系、启动命令行、数字签名等关键信息,并支持线程、句柄、网络连接等细粒度监控。典型应用场景包括:定位CPU高占用时通过线程调用栈分析具体问题代码;检测内存泄漏时监控Private Bytes等指标变化趋势;排查可疑程序时验证路径、签名等身份信息。该工具可与Sy
文章目录
码龄 5 年后,我是如何用 Process Explorer 系统化解决 Windows 疑难杂症的
很多人在排查 Windows 问题时,第一反应都是按下 Ctrl + Shift + Esc 打开任务管理器:看 CPU、看内存、看哪个进程“红”了,然后结束任务。
但当问题变成:
- 明明 CPU 不高,系统就是卡
- 内存一点点被吃光,不知道是谁在慢慢涨
- 怀疑中了木马,任务管理器里看不出异常
任务管理器就显得非常无力了。
这时候,Process Explorer 就该上场了。
它不是“高级任务管理器”那么简单,而是一个可以支撑你建立整套排障方法论的“进程级显微镜”。
本文不是简单的“功能菜单罗列”,而是围绕几个典型场景,讲清楚:
- Process Explorer 能解决什么问题
- 应该开哪些列,关注哪些指标
- 如何把它变成你日常排障的“标准动作”
一、为什么是 Process Explorer,而不是任务管理器?
如果一句话概括:
任务管理器适合“看看”,Process Explorer 适合“搞清楚”。
Process Explorer 主要补齐了任务管理器的这些短板:
-
看到完整的进程树关系(父子进程是谁)
-
查看每个进程的启动命令行、完整路径、数字签名
-
按进程查看线程、句柄、模块(DLL)、网络连接等
-
精细拆分 CPU / 内存 / I/O / 句柄 等多维指标
-
支持搜索:
- 哪个进程占用了这个文件?
- 哪个进程占用了这个端口?
对一个码龄 ≥ 5 年的开发者 / 运维 / 测试来说,更重要的是:
- 它能帮你建立一套 “观察 → 假设 → 验证” 的排障流程,而不是拍脑袋结束任务。
- 很多“玄学问题”(偶发卡顿、长时间跑挂掉、只在客户环境出现的问题),都需要这样的工具才能看出端倪。
二、第一次上手:界面与核心信息怎么读?
如果你第一次打开 Process Explorer,可能会被密密麻麻的界面劝退。
但大部分时候,你只需要把握三块内容:
- 上面的 进程列表(Process Tree)
- 列(Columns)呈现的关键信息
- 双击进程后弹出的 属性窗口(Properties)
2.1 进程树:谁是父进程,谁是“同伙”
进程树最大的价值在于:把“孤立的进程列表”变成“有因果关系的树状结构”。
比如:
- 浏览器主进程启动出一堆渲染进程
- 某个“启动器”进程拉起真正的业务程序
- 某个脚本运行时不断创建子进程执行命令
当你看到一个占用资源异常的子进程时,可以顺着树往上看:
- 它是谁拉起来的?
- 这个父进程是不是某个你不熟悉的软件?
- 一旦结束父进程,下面一串子进程是否会一并消失?
在排查恶意程序、脚本跑飞、自动任务异常时,这非常关键。
2.2 列(Columns):先把“看的信息”选对
默认列往往不够用,建议至少打开这些:
- Image Name / Description / Company Name
- Image Path / Command Line / User Name / Session
- CPU / CPU History / Threads / Handles
- Working Set / Private Bytes / Commit Size
它们分别回答的是:
- 这是谁?从哪来的?路径正规吗?(身份)
- 是哪个用户 / 哪个会话在跑?(归属)
- 现在有多忙?资源占用如何?(状态)
把这几列配置好,基本就够支撑 80% 的日常排障。
2.3 双击进程:属性窗口是第二现场
选中一个进程双击,可以看到更多细节:
- Image:路径、命令行、签名、工作目录
- Performance:CPU、内存、线程、句柄等趋势
- Threads:每个线程的 CPU 使用率、调用栈
- TCP/IP:网络连接情况
- Handles / DLLs:该进程占用了哪些对象 / 加载了哪些模块
遇到棘手问题时,这里就是你“深挖”的主战场。
三、典型场景一:CPU 飙高时,如何快速定位罪魁祸首?
场景很常见:风扇狂转、系统卡顿、CPU 90%+,但任务管理器里只看到“System”、“某个浏览器”、“某个 IDE”在高占用,却说不清到底是谁搞的鬼。
处理步骤可以固化成一个小流程。
3.1 步骤 1:按 CPU 排序,锁定可疑进程
-
打开 Process Explorer
-
在列头点击 CPU,按占用率排序
-
关注:
- 持续高占用的进程
- CPU History 一直在高位的进程
不要只盯着一瞬间的数字,更要看“趋势”。
3.2 步骤 2:看 Threads,找出最忙的那几根线程
双击进程 → 切到 Threads 标签:
- 按 CPU 排序,看哪几个线程最忙
- 记住这些线程的 TID(线程 ID)
然后选中一个异常高的线程,点击 Stack(调用栈):
-
如果有符号,可以看到是哪个模块 / 函数在消耗 CPU
-
经常会发现:
- 某个第三方 DLL 的循环逻辑
- 某个驱动 / 插件在频繁运行
- 某个 GC / JIT 行为异常频繁
这一步的目标是:
从“这个进程很忙”,进一步缩小到“这几个线程在忙”,再缩小到“这段代码 / 这个模块在忙”。
3.3 步骤 3:结合实际场景做判断
例如:
-
IDE 进程高 CPU,线程栈里全是语法分析 / 索引模块
- 很可能是项目太大 / 索引被强制重建
-
浏览器进程高 CPU,栈里出现某个插件模块
- 禁用插件验证一下
-
某个服务进程高 CPU,栈里总停在加锁 / 等待位置
- 多半是线程竞争 / 死锁前兆
这样,你给出的结论就不再是“把进程杀了就好了”,而是“哪一类逻辑导致了高 CPU”。
四、典型场景二:内存一点点被吃光,怎么判断是不是内存泄漏?
另一个常见现象是:
- 系统刚重启一切正常
- 某个服务 / 应用跑着跑着,内存占用越来越高
- 最后不是崩溃就是被系统强行回收
这时,比起任务管理器那个“内存”数字,Process Explorer 能提供更细的拆分。
4.1 先搞清几个核心概念
-
Working Set(工作集)
- 当前真正驻留在物理内存里的那部分
-
Private Bytes(私有字节)
- 这个进程独占的、其他进程不能共享的内存
-
Commit Size
- 系统为该进程“承诺”分配的内存额度(物理 + 页面文件)
一个简单但非常实用的记忆法:
Working Set = 现在“占着座位”的人
Private Bytes = 整体“报了名”的人数
Commit Size = 学校说“我最多能给你留多少名额”
4.2 如何观察是不是在“慢慢长胖”
建议打开这几列:
- Private Bytes / Private Bytes Peak
- Working Set / WS Peak
- Commit Size
- GUI 程序再加上 GDI Objects / USER Objects
小实验步骤:
- 启动目标程序,记录一遍上述数值
- 正常使用一段时间(比如 30 分钟、1 小时)
- 再次看这些数值的变化趋势
如果你发现:
- Private Bytes 持续增长,几乎不往回掉
- GDI / USER Objects 数量也只增不减
- 程序界面不断打开/关闭,但资源不回收
那么:
很大概率是内存 / 资源泄漏,至少是回收策略不健康。
这时 Process Explorer 的角色是:
- 帮你量化问题:“从 200MB 涨到 1.2GB,GDI 对象从 300 涨到 4000”
- 给你证据,可以配合专业内存分析工具(.NET profiler、native profiler)做下一步定位
五、典型场景三:怀疑中毒 / 有恶意程序,如何做初步排查?
Process Explorer 不等于杀毒软件,但它是非常好用的 “可疑行为放大镜”。
你可以借助以下信息做第一轮筛查。
5.1 身份三要素:名称 + 路径 + 签名
建议重点关注这些列:
- Image Name
- Description / Company Name
- Image Path
- Verified Signer(签名验证)
典型可疑特征:
-
名字看起来像系统进程(如
svchost.exe/explorer.exe),但路径不在C:\Windows\System32 -
Company Name 写得很奇怪,或者是空白
-
Verified Signer 显示 “Unable to Verify / Not Signed”,但自称是某大厂
-
路径位于:
%TEMP%- 隐蔽目录(带随机字符串)
- 下载目录、桌面等很随意的位置
可以总结成一句排查口诀:
“系统名 + 临时盘路径 + 无签名”,优先怀疑。
5.2 行为线索:Command Line + User + Session
进一步结合:
-
Command Line:
- 是否带有明显的“静默参数”(如
-silent、-hide、-min) - 是否加载奇怪 DLL / 脚本
- 是否带有明显的“静默参数”(如
-
User Name / Session:
- 是否在 SYSTEM / 高权限账号下运行
- 是否出现在不该有 GUI 的 Session 里
例如:
- 一个来历不明的 EXE,在后台以 SYSTEM 权限运行,命令行里还带有加载远程 DLL 的参数
- 某个看似“驱动更新工具”,路径在临时目录,Company “Unknown”,签名不可验证
这类进程就值得进一步用专业安全工具扫描。
六、进阶:把 Process Explorer 和其他 Sysinternals 工具串起来用
当问题变复杂时,单靠一个工具往往不够。
Sysinternals 套件里有很多可以联动的工具:
-
Process Monitor(ProcMon)
- 记录文件 / 注册表 / 进程操作
- 适合排查 “安装 / 启动时到底访问了哪些资源”
-
Autoruns
- 枚举所有启动项、计划任务、浏览器插件等
- 找“启动即常驻”的奇怪项目非常好用
-
TCPView
- 查看当前所有网络连接,可按进程过滤
- 配合 Process Explorer 的 TCP/IP 信息一起看,定位某个进程正在对外通讯
一个常见的综合场景是:
- 用 Process Explorer 找到一个可疑进程
- 看它的路径、签名、命令行、网络连接
- 用 Autoruns 查查它是否注册了启动项 / 服务
- 必要时再用 ProcMon 抓一段生命周期内的操作痕迹
Process Explorer 是入口,其它工具是“深挖放大器”。
七、如何把 Process Explorer 固化为自己的排障方法论?
工具只是工具,真正拉开差距的是习惯和流程。
可以尝试把下面这套流程变成自己的默认做法:
-
遇到问题先定性:
- 卡顿?
- 占用高?
- 资源泄漏?
- 行为异常(弹窗、网络连接)?
-
打开 Process Explorer,看全局:
- CPU / 内存 整体情况
- 哪些进程占比明显异常
-
针对性深入:
- 高 CPU → 看 Threads + Stack
- 内存问题 → 看 Private Bytes / WS / Peak
- 可疑行为 → 看 Path / Command Line / Signer / TCP/IP
-
记录关键信息:
- 进程名、版本、路径
- 指标变化前后对比(截图 / 笔记)
- 调整或重启之后的效果
-
回过头总结:
- 这次问题如果再发生,我能不能用更少步骤更快定位?
- 是否可以写成一篇“经验复盘”博客,下次直接参考?
这样,你不只是在“会用 Process Explorer”,
而是在用它构建自己的 Windows 排障知识体系。
结语:从“按经验瞎试”到“有证据地排障”
对码龄 5 年以上的程序员 / 测试 / 运维来说,真正重要的已经不是“会不会某个命令 / 某个工具”,而是:
- 能不能给出有证据支撑的判断
- 能不能把一次次排障过程沉淀成可复用的方法论
Process Explorer 提供的,正是这样一副“看得见的证据界面”:
- 它帮你看清楚每个进程的 来历、行为、资源占用和关系
- 帮你从 “感觉卡” 走向 “谁在什么时间、做了什么事情导致了卡顿”
- 帮你把一次次“经验排障”,变成可以写进博客、写进笔记的系统知识
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)