目录
1.下载Procexp64进程资源管理器
2.使用Procexp64进程资源管理器
前言
本篇博客主要讲解的是Procexp64进程资源管理器,这是Sysinternals套件里一个加强版的任务管理器",它把Windows自带任务管理器只能给的粗粒度CPU / 内存 / 磁盘数据,往下详细到了进程级、线程级甚至句柄级,你能直接看到某个进程打开了哪些文件句柄、加载了哪些DLL、占了哪个TCP端口、哪个线程正在跑什么调用,这对开发调试文件占用、端口冲突、句柄泄漏是救命的;它还能挂符号表把线程栈还原成函数名,排查死锁或高 CPU 线程时不用开WinDbg就能先粗定位,进程树模式能看清谁spawn了谁。而且能实时看GPU、I/O、私有工作集这些更细的指标,比任务管理器那点信息深得多,算是Windows下开发者和运维排障的标配。
下载Procexp64进程资源管理器
Procexp64进程资源管理器下载链接如下:
Procexp64进程资源管理器下载链接https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer
点击下载链接跳转至下载网站后,点击Download Process Explorer即可下载Procexp64进程资源管理器。如下图:
图1.下载Procexp64进程资源管理器
使用Procexp64进程资源管理器
下载成功以后,解压压缩包双击procexp64.exe可执行文件即可打开Procexp64进程资源管理器。
图2.打开Procexp64进程资源管理器
打开Procexp64进程资源管理器以后,如图3我们能看到主界面分为以下几个模块:
1.菜单栏:包含File/Options/View/Process/Find/Users/Handle/Help,用于设置视图、查找进程、查看句柄等。
2.性能小图:顶部的小型实时曲线,用来快速观察CPU、内存、I/O等资源变化。
3.进程树:左侧按父子关系展示进程,例如多个msedge.exe是Edge的多进程结构。
4.资源列:例如CPU代表当前的CPU占用,PrivateBytes代表进程私有虚拟内存,WorkingSet代表当前实际驻留物理内存,PID代表进程ID。
5.下方面板标签:Handle/DLLs/Threads,用于查看选中进程的句柄、加载 DLL、线程。
6.状态栏:底部显示全局资源状态。
图3.Procexp64主界面
接下来我们使用Weixin.exe举例,点击下方的DLLS既能查看Weixin.exe加载的一些动态链接库的信息。
图4.进程加载的DLL信息
也可以通过调整为Threads查看当前Weixin.exe创建的线程状态和性能数据。
图5.进程创建的线程信息和性能数据
在主界面中,我们也可以对进程右键来手动创建Dump文件,这与资源管理器的操作是一致的。
图6.创建Dump文件
如果我们需要查看更详细的进程当前详细,则需要双击选中的进程打开子窗口即可查看详细数据,如下图:
图7.查看详细的进程信息
在进程的详细信息窗口中,我们可以在Threads页下查看以下信息:
1.Count:线程总数
2.进程创建的线程信息:PID代表线程ID,CPU代表该线程当前的CPU使用率,CyclesDelta代表线程近期的CPU周期变换,SuspendCount代表线程被挂起的次数,StartAddress代表线程入口或者当前符号的位置,可以用来判断线程来自哪一个DLL或者模块
3.所选线程运行状态:State代表线程当前所处的状态,KernelTime和UserTime分别表示内核态和用户态的累计执行时间,ContextSwitches代表线程上下文的切换次数,BasePriority和DynamicPriority分别代表线程基础优先级和动态优先级,IdealProcessor代表系统倾向于把当前线程调度到哪一个CPU
图8.进程详细信息窗口
而我们在进程详细详细窗口中双击选中的线程,可以弹出线程当前调用的堆栈信息,这些信息可以帮助我们分析线程泄露等问题。
图9.线程调用堆栈窗口
除去Threads标签以外,我们可以在Performance标签页中查看到以下信息:
1.CPU信息:当前进程的优先级和累计消耗的CPU时间
2.虚拟内存信息:当前经常提交内存大小
3.物理内存信息:当前经常占用的物理内存大小
4.进程I/O信息:当前进程的IO信息
5.进程句柄信息:当前进程的句柄信息,如果句柄数持续上涨则代表句柄泄露
图10.Performance标签页
在GPU Graph标签页中,我们可以查看到以下信息:
1.GPU Usage:当前进程调用GPU渲染和计算的使用率
2.Dedicated GPU Memory:当前进程占用的独立显存信息
3.System GPU Memory:当前进程使用的共享系统内存空间
4.Committed GPU Memory:当前进程提交的GPU内存总量
图11.GPU Graph标签页
在Image标签页中,我们可以重点关注以下信息:
1.Version:当前进程的版本信息
2.Path:当前进程的可执行文件路径
图12.Image标签页
在Environment标签页中,我们可以查看当前进程的环境变量信息,如图13。
图13.Environment标签页
在Performance Graph标签页中,我们可以观察到当前进程CPU相关的信息,具体如下:
1.CPU Usage:当前进程的CPU使用率
2.Private Bytes:当前进程提交的私有内存大小
3.I/O:当前进程的IO使用率
图14.Performance Graph标签页