1. 打开

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

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

2. 进程

点击左下角的详细信息,显示如下:

该标签页按照应用后台进程Windows进程(滚动条下方)来归类显示,并给出每个分类中进程数,以及CPU和内存的使用百分比。

以现在为例,2019年11月18日15时32分00秒,分别有:

  • 应用(8)
  • 后台进程(49)
  • Windows进程(28)

合计85个,进入详细信息标签中统计却有76个进程、相差9个。详细信息的76个应该是真实的,起码这个功能被使用(测试)的频率最高,出现bug的概率较低,那么2个数值不等应该归于对2个标签页的功能设计不一致导致,比如:

  • 到底有哪些分类?
  • 如何分类?

3. 性能

  • 显示出CPU、内存和多个网卡的使用率,及网卡的实时数据量。
  • 单击左侧CPU、内存、以太网,右侧显示详细。
  • 单击左侧的某个以太网后,在右侧详细中点击鼠标右键->查看网络详细信息(D),能观察到该网卡的使用率、链接速度、状态、发送以及接收的吞吐量百分比、每个间隔发送/接收的字节数。
    • 前些年有一次误把万兆网卡插到百兆网口上,导致流媒体效果很差,花很长时间才通过这里看出端倪,很遗憾,巨人家Server版本操作系统的产品经理,竟然把这个重要的数据隐藏如此之深,比起2009年发布的Windows 7反而开倒车。
  • 左侧磁盘 N显出了磁盘数量和每块磁盘对应的驱动器名称,单击某块磁盘后,右侧显示她的响应时间、容量、读取和写入速度
    • Windows 10(发布于2015年)的左侧提供了上述每块磁盘的入口,Windows Server 2012则没有,预计2016年发布的Server 2016也会有,2019年了Windows服务器首选推荐Server 2016。

点击资源监视器可查看从计算机的硬件资源为视角的统计报告,尤其是网络/硬盘等IO相关的数据,请移步:Windows资源监视器

4. 详细信息

攻城狮使用这个标签页的频率最高,列表中的默认信息不够,建议如下操作重新选择列:

  • 在表头标题处,点击鼠标右键–>选择列(S)**。
  • 选中PIDCPU工作集(内存)提交大小页面错误页面错误增量句柄线程命令行
  • PID列拖动到第一列。

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

4.1. 工作集(内存)

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

4.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数组变量,结果访问变量时发生内存错误(细节没留存),默认内存相关指标列无法看出她占用了高内存,勾选内存-提交大小就立马发现原来她占用了这么高虚拟内存,就定位到原因了。

4.3. 页面错误

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

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

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

5. 结束

6. 参考

  1. Windows 7任务管理器
  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. 虚拟内存与物理内存的联系与区别