Debugging Tools for Windows

!vm

!vm扩展命令显示目标系统中虚拟内存使用统计的摘要信息。

语法

Windows NT 4.0的语法

!vm 

Windows 2000和之后的语法

!vm [Flags

参数

Flags
(Windows 2000和之后) 指定命令输出中要显示哪些信息。可以是下面这些位的任意的和。默认值是0,会显示系统范围的内存使用统计,以及每个进程的内存统计。
Bit 0 (0x1)
不显示进程相关的统计。
Bit 1 (0x2)
显示内存管理线程的调用堆栈。
Bit 2 (0x4)
(Windows XP和之后) 显示终端服务器(terminal server)的内存使用情况。
Bit 3 (0x8)
(Windows XP和之后) 显示页面文件写日志(page file write log)。
Bit 4 (0x10)
(Windows XP和之后) 显示工作集所有者线程的调用堆栈(working set owner thread stacks)。
Bit 5 (0x20)
(Windows XP和之后) 显示内核的虚拟内存使用情况。

DLL

Windows NT 4.0 Kdextx86.dll
Windows 2000 Kdextx86.dll
Windows XP和之后 Kdexts.dll

注释

下面是当Flags为1时的简短输出的示例:

kd> !vm 1

*** Virtual Memory Usage ***
      Physical Memory:     16270   (   65080 Kb)
      Page File: \??\E:\pagefile.sys
         Current:     98304Kb Free Space:     61044Kb
         Minimum:     98304Kb Maximum:       196608Kb
      Available Pages:      5543   (   22172 Kb)
      ResAvail Pages:       6759   (   27036 Kb)
      Locked IO Pages:       112   (     448 Kb)
      Free System PTEs:    45089   (  180356 Kb)
      Free NP PTEs:         5145   (   20580 Kb)
      Free Special NP:       336   (    1344 Kb)
      Modified Pages:        714   (    2856 Kb)
      NonPagedPool Usage:    877   (    3508 Kb)
      NonPagedPool Max:     6252   (   25008 Kb)
      PagedPool 0 Usage:     729   (    2916 Kb)
      PagedPool 1 Usage:     432   (    1728 Kb)
      PagedPool 2 Usage:     436   (    1744 Kb)
      PagedPool Usage:      1597   (    6388 Kb)
      PagedPool Maximum:   13312   (   53248 Kb)
      Shared Commit:        1097   (    4388 Kb)
      Special Pool:          229   (     916 Kb)
      Shared Process:       1956   (    7824 Kb)
      PagedPool Commit:     1597   (    6388 Kb)
      Driver Commit:         828   (    3312 Kb)
      Committed pages:     21949   (   87796 Kb)
      Commit limit:        36256   (  145024 Kb)

所有的内存使用都是以页面数和KB为单位。输出中最有用的信息如下:

参数 含义
physical memory 系统中总的物理内存。
available pages 系统中可用内存的页面数,包括虚拟和物理内存。
nonpaged pool usage 非分页池中分配的页面总数。非分页池是不会换出到页面文件中的内存,所以它必须一直占用物理内存。如果这个数字过大,通常表示系统中某个地方存在内存泄露。

附加信息

!memusage扩展命令可以用来分析物理内存的使用。关于内存管理的更多信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

Build machine: CAPEBUILD