前言
才发现这个Windows自带的小软件,查端口占用还是很方便,学习一下。
一、资源监视器简介
资源监视器是Windows系统内置的工具,用于实时监控CPU、内存、磁盘和网络等硬件资源的使用情况。它能帮助你:
- 诊断系统卡顿、程序无响应等问题;
- 查看哪些程序占用资源过多;
- 优化系统性能,提升电脑运行效率。
二、启动资源监视器
有多种方式可以启动它,程序员应该选择最顺手的一种:
2.1 快捷键 (推荐) :按 Ctrl + Shift + Esc
打开任务管理器 -> 切换到"性能"标签页 -> "打开资源监视器"。
标签页 | 主要功能 | 典型用途 |
---|---|---|
CPU | 展示各进程、服务的 CPU 使用率和线程 | 排查占用过高的进程或服务 |
内存 | 查看物理内存分配、硬件保留和可用量 | 诊断内存泄漏和高占用情况 |
磁盘 | 显示各进程的磁盘读写活动 | 找出频繁读写导致卡顿的进程 |
网络 | 统计每个进程的网络发送和接收流量 | 确定网络带宽占用来源 |
界面如下:

2.2 运行命令 (最快) :按 Win + R
,输入 resmon
并按回车。
2.3 开始菜单:直接在开始菜单搜索"资源监视器"或 "Resource Monitor"。
三、界面介绍与使用指南
资源监视器窗口分为几个主要部分:
-
顶部摘要栏:以图表形式实时显示 CPU、磁盘、网络和内存的总体使用情况。
-
五个标签页 :概述、CPU、内存、磁盘、网络。这是核心功能区域。
-
动态过滤器 :每个标签页下方都有一个进程列表,勾选进程前的复选框可以过滤下方所有图表和数据,只显示与该进程相关的活动。这是最强大的功能!
具体各部分功能阐述如下。
3.1 CPU 标签页
-
功能:监控进程和服务的 CPU 占用,并深入到线程级别。
-
程序员应用场景:
-
排查 CPU 占用 100% 的问题:
-
在"进程"列表中,按"CPU"列排序,找到罪魁祸首。
-
关键步骤:勾选那个高占用的进程,然后查看右侧的"关联的句柄"和"关联的模块"。
-
"关联的句柄":可能会显示该进程正在频繁操作的文件或注册表键,这可能是瓶颈所在。(例如,它在疯狂写日志文件?)
-
"关联的模块":显示进程加载的 DLL。如果某个第三方库的 DLL 占用异常高,可能是该库的 bug 或兼容性问题。
-
-
分析多线程性能:
-
勾选你的进程,然后切换到"CPU"标签页底部的"线程"视图。
-
这里可以看到你的进程创建的每一个线程的 CPU 占用情况。结合你的代码,你可以判断出是否是某个特定线程(例如,一个死循环的计算线程)导致了高负载。
-
技巧:右键点击线程列表的标题栏,勾选"命令行"和"进程 ID",可以显示更详细的信息。
-
-
3.2 内存 标签页
-
功能:详细展示物理内存的使用情况,远不止"已提交"和"已缓存"这么简单。
-
程序员应用场景:
-
排查内存泄漏 (Memory Leak):
-
关注"提交 (KB)"和"工作集 (KB)":工作集是当前在物理内存中的部分,提交是进程承诺要使用的总量(包括在页面文件中的)。如果一个进程的"提交"内存随时间持续稳定增长,而逻辑上它不应该(例如,处理完一批数据后内存应释放),这就强烈暗示存在内存泄漏。
-
"硬错误/秒":如果这个值持续很高,说明进程频繁需要从硬盘页面文件 (pagefile.sys) 中交换数据,即"缺页中断"。这通常是内存不足或程序访问内存方式非常分散( locality 差)的标志,会导致性能急剧下降。
-
-
了解内存分配细节:
-
"专用 (KB)" :这是你的进程真正独享的内存,是分析内存泄漏最关键的指标。
-
"可共享 (KB)":进程当前使用但可能与其他进程共享的内存(通常是 DLL 代码)。
-
"共用 (KB)":当前正被多个进程共享的内存量。
-
-
3.3 磁盘 标签页
-
功能:监控所有进程的磁盘 I/O 活动,包括读写速度、响应时间和操作队列。
-
程序员应用场景:
-
排查程序"卡顿":程序运行时界面卡顿,不一定是 CPU 问题,很可能是磁盘 I/O 阻塞。
-
在"进程与磁盘活动"中,查看"总计 (B/秒)"排序,找到磁盘活动最频繁的进程。
-
关注"磁盘队列长度":如果平均值持续大于 1,说明磁盘请求已经排起队了,磁盘成为系统瓶颈。你的程序可能是制造者,也可能是受害者。
-
-
找出程序正在访问哪些文件:
- 勾选你的进程,查看下方的"磁盘活动"列表。这里会实时显示你的进程正在读写哪个具体文件,以及读写速度。这对于调试配置文件读取、日志写入、数据缓存等操作极其有用。
-
优化数据库或文件操作:你可以清晰地看到数据库进程(如 MySQL, SQL Server)的读写操作频率和文件,帮助判断是否是 I/O 瓶颈。
-
3.4 网络 标签页
-
功能:监控所有进程的网络活动,包括带宽占用、TCP 连接和监听端口。
-
程序员应用场景:
-
"地址已在使用中" (端口占用):
-
这是程序员的经典问题。切换到"侦听端口"列表。
-
按"端口"排序,快速找到是哪个进程占用了你想要的端口(如 8080, 3306)。
-
右键标题栏,可以添加"PID"和"命令行"列,方便确认。
-
-
分析网络通信:
-
勾选你的进程,查看"TCP 连接",可以看到它当前与哪些远程 IP 和端口建立了连接。
-
查看"网络活动",可以看到它正在通过哪个本地地址和端口发送/接收数据,以及实时流量。
-
-
排查网络性能问题:
- "TCP 连接"中的"发送/接收延迟"和"连接失败"计数可以帮你判断网络链路的质量问题。
-
四、实战案例:一个完整的调试流程
问题 :你开发的 Web 服务程序 MyWebServer.exe
在运行一段时间后响应变慢,并且服务器整体内存占用很高。
-
初步定位 (概述标签页):
-
打开资源监视器,在"概述"页的"CPU"、"磁盘"、"网络"图表中,可能看不到明显瓶颈。
-
但在"内存"图表中,你看到"可用"内存很少,"已修改"和"备用"内存很多。提示问题可能出在内存。
-
-
深入分析 (内存标签页):
-
切换到"内存"标签页。
-
在进程列表中按"提交 (KB)"排序,发现
MyWebServer.exe
的提交内存异常高,并且还在缓慢增长,而其他进程很稳定。强烈怀疑内存泄漏。 -
记录下它的 PID (例如 4412)。
-
-
关联分析 (CPU & 磁盘标签页):
- 由于内存不足,系统会频繁进行内存分页。切换到"磁盘"标签页,你可能会看到"磁盘队列长度"偶尔飙升,并且
MyWebServer.exe
或System
进程产生了大量磁盘写入(写入页面文件),这解释了为什么服务会变"卡"。
- 由于内存不足,系统会频繁进行内存分页。切换到"磁盘"标签页,你可能会看到"磁盘队列长度"偶尔飙升,并且
-
结合其他工具:
-
现在你知道了罪魁祸首是
MyWebServer.exe
(PID: 4412) 存在内存泄漏。 -
接下来,你可以使用 Performance Monitor (perfmon) 来记录该进程的私有字节等计数器,确认泄漏趋势。
-
最后,使用 调试器 (WinDbg) 或 专门的内存分析工具 (.NET 的 dotMemory, CLR Profiler; C++ 的 Valgrind, VMMap, Deleaker) 来附加到该进程上,分析具体是哪部分代码、哪种对象发生了泄漏。
-