1. 打开

  • 键盘:CTRL + SHIFT + ESC
  • 鼠标:任务栏上右键->启动任务管理器(K)
  • 命令:taskmgr

任务管理器是Windows上首要的系统监控工具,类似Linux上的Top,下面介绍常用功能。

2. 应用程序

该标签页显示任务栏中正在运行的软件,和下面进程中对比,这里显示出的应该是带窗口的图形界面进程。

3. 进程

攻城狮使用这个标签页的频率最高,先勾选左下角的显示所有用户的进程,然后如下操作选择查看进程的参数列:

  • 菜单查看(V)->选择列(S)
  • 选中PIDCPU使用率内存-工作集内存-提交大小页面错误页面错误增量句柄数线程数命令行
  • PID列拖动到左手第一列,映像名称作为第二列。

点击某一列的标题栏,下方任务行将根据其值递增排序,再次点击递减排序。有了命令行列后,直观地看到该进程所在目录、命令行参数。下面介绍几个和内存有关的列:

3.1. 内存-工作集 = 工作设置(内存)

  • 进程和其依赖的共享库共同占用的物理内存。像操作系统提供的共享库(Windows上即DLL)被多个进程同时适用,在物理内存中也仅仅出现一份。

3.2. 内存-提交大小

  • 进程的虚拟内存空间总大小,但不包括共享库的物理内存。

32位Windows下的软件,最大支持4GB内存空间,到了64位Windows,1个64位软件可申请的内存空间没有限制。假设当前机器的物理内存是8GB,一个64位软件运行起来后经占用了6GB内存,此时使用C与语言的malloc函数再申请3GB内存空间,是可能成功的,因为malloc返回的是虚拟内存地址,物理内存还缺少的3 - (8 -6) = 1GB空间,Windows内存管理模块会把她映射到硬盘上C:\pagefile.sys文件中的某片区域,当软件访问这1GB虚拟内存数据时,内存管理模块发出缺页中断,然后访问硬盘、交换数据,再把CPU时间还给软件、继续执行。

所以当评价系统整体性能或某几项软件的性能指标时,提交大小和下面的页面错误等非常重要,她们直观地显示出是否有和硬盘交换数据,再某些关键场景下这些很重要。

还记得有一次静态声明了长为N个GB的char数组变量,结果访问变量时发生内存错误(细节没留存),默认内存相关指标列无法看出她占用了高内存,勾选内存-提交大小就立马发现原来她占用了这么高虚拟内存,就定位到原因了。

3.3. 页面错误

  • 当进程访问某虚拟内存地址,发现对应内容存储在磁盘中时,就会发生一次页面错误的系统中断,然后从磁盘读取数据到物理内存,同时该值依次递增,频繁发生会降低运行性能。

下图简要说明了Windows中各类申请内存的API的关系:

详细地关于操作系统的虚拟内存及内存管理等资源,请查看文末的参考链接。

4. 性能

  • 中央位置显示CPU和内存占用率的曲线图,按住F5不放可看到实时的变化图,其他各个标签页基本都有F5刷新功能。
  • 所有CPU一张图表:菜单查看(V)->CPU记录(C)->所有CPU一张图表(O)
  • 每个CPU一张图表:菜单查看(V)->CPU记录(C)->每个CPU一张图表(P),适用于查看多核CPU时每个核心的负载。
  • 下方显示系统总的句柄、进程、开机时间等。

上图显示物理内存16GB,系统中的提交(GB) 17 / 31说明,虚拟内存文件c://pagefile.sys约15GB,所以合计31GB,目前所有进程总共提交17GB,其中物理内存占用16GB * 71% = 11.36GB,虚拟内存文件占用17GB - 11.36GB = 5.64GB。

5. 联网

  • 中央显示每个网卡使用率的曲线图。
  • 推荐高刷新率:点击菜单查看(V)->更新速度(U)->高(H),F5实时刷新。
  • 推荐查看网卡详细数据:点击菜单查看(V)->选择列(S),选择网络使用率、线路速度、状态、每间隔发送的字节数、每间隔接收的字节数
  • 有一些虚拟网卡比如VPN、VMware等。
  • Npcap Loopback Adapter127.0.0.1localhost表示的本机协议栈网卡, Windows 7上是10Mbps的线路速度。

当分析网络软件时,非常想知道每秒发送和接收的数据带宽,上述每间隔发送/接收的字节数可做参考,但不清楚每间隔对应刷新间隔是多少,如果不是每秒的话,往往还得换算,而且看不到每一个具体进程的带宽。更好的办法请移步参考Windows资源监视器中的网络部分。

6. 参考

  1. Windows 10和Server 2012上的任务管理器
  2. Windows资源监视器
  3. aida64-强大的软硬件系统信息工具
  4. CPU-Z
  5. GPU-Z
  6. Win32 memory management
  7. is memory allocation a system call
  8. 什么是内存(二):虚拟内存
  9. Windows 任务管理器中的几个内存概念
  10. 谈谈所谓的要不要关闭虚拟内存
  11. 虚拟内存与物理内存的联系与区别