ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

跟踪MmSt分页池使用情况

2020-09-25 08:00:22  阅读:289  来源: 互联网

标签:kb memusage 分页 文件 PTE t2 跟踪 MmSt


我最近注意到的一个趋势是,在尝试KB304101(PoolUsageMaximum)之后,MmSt标签的使用率仍然很高,这是一种趋势。内存管理器将这些池分配用于节对象原型pte。通常只有两种选择:1)升级到64位平台,或2)减小卷的大小。但我们可能想知道哪些映射文件正在使用这个内存。这是如何做到的。从!memusage开始。

5: kd> !memusage

 loading PFN database

loading (100% complete)

Compiling memory usage data (99% Complete).

             Zeroed: 19073 ( 76292 kb)

               Free: 0 ( 0 kb)

            Standby: 1468824 (5875296 kb)

           Modified: 368 ( 1472 kb)

    ModifiedNoWrite: 1927 ( 7708 kb)

       Active/Valid: 605772 (2423088 kb)

         Transition: 0 ( 0 kb)

                Bad: 0 ( 0 kb)

            Unknown: 0 ( 0 kb)

              TOTAL: 2095964 (8383856 kb)

  Building kernel map

  Finished building kernel map

Scanning PFN database - (100% complete)

在此之后,您将看到映射文件及其控制区域的列表。

Usage Summary (in Kb):

Control Valid Standby Dirty Shared Locked PageTables name

…

8c62a638 1108 945868 3064 0 0 0 mapped_file( $Mft )

…

控制区是最左边的地址,它有一个包含PTE总数的段字段。

5: kd> dt 8c62a638 _CONTROL_AREA Segment->TotalNumberOfPtes

nt!_CONTROL_AREA

   +0x000 Segment :

      +0x004 TotalNumberOfPtes : 0x1e8b00

MmSt分配包含这些PTE,所以我们需要做的就是将其乘以PTE的大小,从而得到这个控制区域的MmSt分配的总大小。请注意,此控制区域可能有多个分配,但此数字将反映所有这些分配的总大小。

5: kd> ?? 0x1e8b00 * sizeof(nt!_MMPTE)

unsigned int 0xf45800

所以现在我们知道了单个控制区域或映射文件的MmSt大小(以字节为单位)。如果我们想查看来自的所有映射文件的总数呢!内存使用输出?首先,放置!memusage在文本文件中输出并删除所有头信息。您还需要删除所有尾部信息,包括页面文件和流程摘要。每一行都应该像这样。

8c62a638 1108 945868 3064 0 0 0 mapped_file( $Mft )

8b06ac18 516 0 0 0 0 0 No Name for File

我们希望包含“No Name for File”条目,因为这些条目是有效的映射文件,即使找不到该名称。下一步,除去控制区地址之外的所有内容。您可以使用Excel或任何其他工具来选择和删除文本文件中的列。现在我们有了一个文件,其中只有一列系统上所有的控制区域。以下调试器命令脚本可用于处理此文件。

$$ countptes.txt script

r $t2 = 0;

$$ Replace the memusage.txt file name with your file name.

.foreach /f (ca "memusage.txt") {

    r $t1 = @@c++(((nt!_CONTROL_AREA *)(0x${ca}))->Segment->TotalNumberOfPtes);

    .printf "Control Area %p : %d\n", ${ca}, @$t1;

    r $t2 = @$t2 + @$t1;

}

.printf "Total PTEs : %d\n", @$t2;

.printf "MmSt size : %d bytes\n", (@$t2 * @@c++(sizeof(nt!_MMPTE)));

下面的命令将执行脚本。

5: kd> $$><countptes.txt

这将显示每个控制区域的PTE数量,然后是摘要。

Total PTEs : 62790244

MmSt size : 502321952 bytes

MmSt分配的一个常见高用户是$Mft。缓存管理器将保存这些文件系统元数据文件的MmSt分配,每个PTE最多4个文件。通过首先在命令提示符处使用findstr将这些值与!输出内存使用。

C:\Projects>findstr /c:"$Mft" memusage.txt >mftusage.txt

在用Excel剥离出控制区域地址并运行命令脚本之后,您将只获得$Mft文件的MmSt分配大小。如果这占用了大部分MmSt字节,那么您只能使用本文开头提到的选项。如果其他用户是主要用户,可能还有其他选择,但这可能涉及到减少系统上的一些重负载。

标签:kb,memusage,分页,文件,PTE,t2,跟踪,MmSt
来源: https://www.cnblogs.com/yilang/p/13617118.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有