GpuMemTool — Windows 显存监控与释放工具
基于 nvidia-smi + Windows 性能计数器,列出每个进程占用多少显存,可一键结束进程释放显存,并带显存 / GPU 占用率实时曲线监测。零依赖:系统自带 Windows PowerShell 5.1 + WinForms 即可运行。
本仓库包含两个版本:
| 版本 | 文件 | 说明 |
|---|---|---|
| v1.1 | GpuMemTool.ps1 / GpuMemTool.exe |
稳定版,单文件 exe(约 180 KB),双击即用 |
| v2.0 | new1022/GpuMemTool.ps1 |
性能优化版:采集单轮 2433ms → 约 420ms(GPU 空闲)/ 970ms(GPU 忙),并修复采集超时导致的背靠背采样问题 |
v2.0 的详细改动见脚本头部注释。
v1.1 版本说明(根目录文件)
一个面向 Windows 的轻量显存(VRAM)监测与释放工具:列出每个进程占用了多少显存,并可直接结束进程回收显存,同时提供显存 / GPU 占用率的实时曲线监测。
基于 nvidia-smi + Windows 性能计数器,零依赖 —— 只用系统自带的 Windows PowerShell 5.1 + WinForms,不需要安装 Python、.NET SDK 或任何第三方库。
交付形态:单个 GpuMemTool.exe(约 180 KB),双击即用,启动时自动请求管理员权限。
脚本已内嵌在 exe 内部,不需要附带任何其他文件。
本文件属于显存工具,与同目录的奶蛙桌宠项目(
README.md/src//dist/)无关。
文件说明
| 文件 | 作用 |
|---|---|
GpuMemTool.exe |
交付主程序:单文件、免安装、双击运行(内嵌脚本 + 图标 + UAC 提权逻辑) |
GpuMemTool.ps1 |
源码(可读可改;运行效果与 exe 完全一致,也会自己请求 UAC) |
RunAsAdmin.bat |
备选入口:双击提权运行 GpuMemTool.ps1 |
GpuMemTool-README.md |
本说明 |
只需要
GpuMemTool.exe一个文件就能用,其余文件可以删除/保留随意。
使用方法
- 双击
GpuMemTool.exe→ 弹出 UAC 窗口(标题为GpuMemTool.exe)→ 点「是」→ 主界面出现。- 点「否」也不会报错:程序会继续以普通权限运行,界面右上角显示红色提示, 可随时点「以管理员身份重启」再试(只是部分进程无法结束)。
- 首次启动约 5~15 秒完成性能计数器初始化(界面有提示),随后进入实时刷新。
exe 的运行细节(透明说明)
- 启动时会把内嵌脚本释放到
%LOCALAPPDATA%\GpuMemTool\GpuMemTool.ps1(每次校验内容, 一致则不重写),然后用系统自带的 Windows PowerShell 运行它; - 启动诊断日志:
%LOCALAPPDATA%\GpuMemTool\launcher.log(仅在启动异常时才有用); - exe 是免安装的绿色程序,不写注册表、不建服务;删除 exe 即可卸载
(如需彻底清理,再删掉上面那个
%LOCALAPPDATA%\GpuMemTool目录即可); - exe 未做代码签名,从本机运行不会有 SmartScreen 提示;若通过网络/U盘拷贝过来可能被 标记为「来自 Internet」,此时右键 → 属性 → 勾选「解除锁定」即可。
界面说明
- 顶部工具栏:刷新间隔(1/2/3/5/10 秒)、自动刷新、「只看显存 ≥ 50MB」过滤、 立即刷新(F5)、结束选中进程(Delete)、强制结束、导出监测数据;右上角显示占用最高的进程。
- 6 个指标卡片:显存占用(已用/总量 + 进度条,≥70% 变黄、≥90% 变红)、GPU 核心利用率、 显存带宽利用率、GPU 温度、功耗、进程显存合计(并显示「未归属(驱动/系统)」的部分)。
- 进程列表:PID、进程名、显存 (MB)、显存占比、GPU 占用 %、数据来源、窗口标题/命令行、 可执行文件路径。点击任意表头即可排序(默认按显存从大到小)。
- 实时曲线:蓝色为显存占用(左轴 MB),紫色为 GPU 利用率(右轴 %),红色虚线为 90% 警戒线。
- 状态栏:最近更新时间、进程数、采集异常提示、本次已释放的显存总量。
右键菜单 / 快捷键
| 操作 | 说明 |
|---|---|
结束进程 / Delete |
结束选中进程(默认先尝试正常关闭窗口,3 秒内没退出再终止) |
| 强制结束 | 直接 Stop-Process -Force |
| 复制 PID | 把选中进程的 PID 复制到剪贴板 |
| 打开文件所在位置 | 在资源管理器中定位该进程的可执行文件 |
| 查看详细信息 / 双击行 | 显示命令行 + tasklist /V 的完整信息 |
F5 |
立即刷新 |
支持 Ctrl / Shift 多选,可一次结束多个进程。
进程保护机制(安全设计)
结束进程前会依次检查,避免误杀:
- 禁止结束(
BlockNames):System、Idle、Registry、Memory Compression、csrss、wininit、services、lsass、smss、winlogon、fontdrvhost、MsMpEng等 —— 结束它们会导致系统蓝屏或不可恢复。 - 保护自身:本工具自己的 PID,以及直接父进程(控制台宿主
powershell.exe/cmd.exe/ Windows Terminal,结束它会连带关掉本窗口)。 - 二次确认(
WarnNames):dwm、explorer、svchost、SearchHost、StartMenuExperienceHost等系统外壳进程 —— 允许结束,但要连续确认两次,并提示桌面可能闪烁。 - PID 复用保护:真正结束前会重新读取该 PID 的进程名,若与列表里的名字不一致 (说明 PID 已被系统复用给别的进程),则跳过,避免误杀。
- 确认框会列出每个待结束进程的名字、PID、占用显存,以及预计可释放的总量。
结束进程的真实行为(重要)
Stop-Process 有个坑:它可能"假成功" —— 调用没报错,但进程被驱动/反作弊挡住而不退出
(典型是卡死的游戏进程:只剩 1 个线程、工作集接近 0,却仍占着 1.6 GB 显存)。旧版本信了它的返回值,
于是显示"已结束"、进程却纹丝不动,看起来就是"按钮不生效"。
现在的处理流程是三步 + 结果校验:
- 先尝试正常关闭窗口,3 秒内没退出就
Stop-Process; - 轮询确认进程是否真的消失(不看返回值,只看事实);
- 没消失就自动回退到 WMI
Win32_Process.Terminate—— 这条路径由 SYSTEM 权限的 WMI 服务执行, 能结束一部分Stop-Process杀不掉的进程(实测:一个卡死的 1.6 GB 游戏进程就是这样被清掉的); - 仍然杀不掉时如实报告,并给出建议:按
Win + Ctrl + Shift + B重启显卡驱动, 或重启系统。
所以现在无论成功还是失败,都会弹出一个结果对话框告诉你到底发生了什么,不会再"点了没反应"。
权限说明
- 结束自己启动的普通进程:普通权限通常就够;
- 结束以管理员身份运行的进程(很多游戏、部分软件):必须让本工具以管理员身份运行,
否则会得到
Access is denied(错误码 5); - 程序启动时自己会请求 UAC;若你点了「否」,界面右上角会显示红色提示, 确认框里也会提前警告"结束其他用户的进程会失败"。
命令行 / 自动化用法
exe 与 ps1 都支持同样的参数(命令行模式不会弹 UAC):
# 无界面自检:采集一次并打印 GPU 指标 + 逐进程显存表格(便于排错)
GpuMemTool.exe -SelfTest
# 结束指定进程(仍受保护名单约束;系统外壳进程需显式加 -Force 才会结束)
GpuMemTool.exe -KillPid 1234,5678 -Force
# 用源码运行等价写法
powershell -NoProfile -ExecutionPolicy Bypass -File GpuMemTool.ps1 -SelfTest
在 cmd/PowerShell 里直接敲
GpuMemTool.exe -SelfTest就能看到输出(exe 会自动接回当前控制台)。
技术说明(为什么不能只用 nvidia-smi)
Windows(WDDM 模式)下,nvidia-smi --query-compute-apps=pid,used_gpu_memory 的
used_gpu_memory 通常返回 [N/A] —— 只有 TCC 模式或纯 CUDA 上下文才有效。实测本机
RTX 5060 Laptop 上所有进程该项都是 [N/A],所以单靠 nvidia-smi 无法回答「哪个进程占用了多少显存」。
本工具采用双数据源合并:
| 数据 | 来源 |
|---|---|
| 显存总量/已用/空闲、GPU 利用率、显存带宽利用率、温度、功耗 | nvidia-smi --query-gpu=... |
| 逐进程显存占用 | Windows 性能计数器 Win32_PerfFormattedData_GPUPerformanceCounters_GPUProcessMemory 的 Local Usage |
| 逐进程 GPU 占用 % | 同计数器集的 GPUEngine 的 UtilizationPercentage(按 PID 汇总) |
| CUDA 进程显存(若有) | nvidia-smi --query-compute-apps,与计数器值取较大者;来源列标注 CUDA / WDDM / CUDA+WDDM |
实测校验:逐进程合计 ≈ nvidia-smi 报告的已用量(例:合计 2377 MB vs 已用 2491 MB, 差值约 114 MB 属驱动/系统保留);界面把差值单独显示为「未归属(驱动/系统)」。
采集性能:首次采集需初始化性能计数器,约 515 秒(界面有提示);之后每次约 0.10.8 秒。
采集在独立 Runspace 中异步执行,界面不会卡顿。
常见问题
- 刚打开时曲线是空的? 正常,前几秒在初始化计数器,界面会提示;第一轮数据到达即出曲线。
- 某个进程的显存很小或为 0? 它可能只是短暂使用 GPU,或占用的是共享显存(Shared)。 本工具显示的是专用显存(Local / Dedicated)。
- 结束进程后显存没立刻下降? 显存由驱动异步回收,通常 1~2 秒内刷新;也可能该进程还有子进程在占用。
- 列表里没有某个进程? 只有「显存 ≥ 1MB 或 GPU 占用 ≥ 0.5%」的进程会被列出; 取消勾选「只看显存 ≥ 50MB」可看到全部。
- 多 GPU 机器:GPU 级指标取第一块 GPU;Windows 性能计数器无法把进程映射到具体某块显卡, 因此进程级数据是多块 GPU 的合计。
- 提示找不到 nvidia-smi? 程序仍可用(仅性能计数器数据),但 GPU 级指标不可用。
请确认已装 NVIDIA 驱动,或
nvidia-smi.exe位于C:\Windows\System32。
注意事项
- 结束进程会立即丢失该进程未保存的数据,请确认后再操作。
- 结束
dwm.exe/explorer.exe会导致桌面、任务栏短暂闪烁或重启(Windows 会自动恢复), 正在运行的全屏程序可能受影响。 - 本工具不会自动结束任何进程,只有你点了按钮并确认后才会执行。