Nonpaged Pool(非分页池) 和 Paged Pool(分页池) 在Windows中的用处

很多DBA对nonpage pool 和 paged pool 搞不太清楚干嘛用的,看perfmon中的说明也看得稀里糊涂。找到一个资料就翻译一下。

From:http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx

Nonpaged Pool(非分页池)

The kernel and device drivers use nonpaged pool to store data that might be accessed when the system can’t handle page faults. The kernel enters such a state when it executes interrupt service routines (ISRs) and deferred procedure calls (DPCs), which are functions related to hardware interrupts. Page faults are also illegal when the kernel or a device driver acquires a spin lock, which, because they are the only type of lock that can be used within ISRs and DPCs, must be used to protect data structures that are accessed from within ISRs or DPCs and either other ISRs or DPCs or code executing on kernel threads. Failure by a driver to honor these rules results in the most common crash code, IRQL_NOT_LESS_OR_EQUAL.

内核或者设备驱动使用非分页池来保存可能访问的数据,但是在访问的时候又不能出现也错误。当内核执行中断服务程序并且延迟调用过程的时候就会进入这种状态,这个状态和硬件中断相关联。当内核或者设备驱动在这个状态后,获取了一个自旋锁,页错误也是不被允许的,自旋锁是唯一能在延迟调用或者中断服务程序中能用的锁类型,用来保护被延迟过程调用和中断服务程序访问的数据,可能来自于延迟过程调用和中断服务程序,也可能来自其他的延迟过程调用和中断服务程序,或者其他的内核线程。如果驱动程序在执行整个规则的时候出错会得到一个 IRQL_NOT_LESS_OR_EQUAL 的崩溃代码

Nonpaged pool is therefore always kept present in physical memory and nonpaged pool virtual memory is assigned physical memory. Common system data structures stored in nonpaged pool include the kernel and objects that represent processes and threads, synchronization objects like mutexes, semaphores and events, references to files, which are represented as file objects, and I/O request packets (IRPs), which represent I/O operations.

非分页池因此总是报错在内存中,非分页池的虚拟地址被物理地址分配。通用的系统数据结构被保存在非分页池中包含内核和代表进程和线程的对象,互斥对象,同步信号量,引用文件(代表文件对象),和I/O请求包(代表I/O操作)

Paged Pool(分页池)

Paged pool, on the other hand, gets its name from the fact that Windows can write the data it stores to the paging file, allowing the physical memory it occupies to be repurposed. Just as for user-mode virtual memory, when a driver or the system references paged pool memory that’s in the paging file, an operation called a page fault occurs, and the memory manager reads the data back into physical memory. The largest consumer of paged pool, at least on Windows Vista and later, is typically the Registry, since references to registry keys and other registry data structures are stored in paged pool. The data structures that represent memory mapped files, called sections internally, are also stored in paged pool.

分页池,从字面意思来说,也就是可以存到系统的分页文件中,允许物理内存重定向。如用户模式的虚拟内存,当驱动或者系统引用分页池内存在分页文件中,那么一个操作就会调用页错误,内存管理系统把数据从分页文件中读取到物理内存。在windows vista和之后的版本,分页池最大的使用者是注册表,引用的注册键值和其他注册表数据都是存储在分页池中。内存映射文件(内部叫做内存对象[Sections])也存在分页池中。

 

Device drivers use the ExAllocatePoolWithTag API to allocate nonpaged and paged pool, specifying the type of pool desired as one of the parameters. Another parameter is a 4-byte Tag, which drivers are supposed to use to uniquely identify the memory they allocate, and that can be a useful key for tracking down drivers that leak pool, as I’ll show later.

设备驱动可以使用ExAllocatePoolWithTag API来申请非分页池和分页池,可以使用参数来指定在那个类型的池中申请。另外一个参数是4个字节的tag,用来唯一标示分配内存的驱动程序,并且在跟踪驱动程序是否缺少池十分有用。

posted on 2012-11-15 15:00  Fanr_Zh 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Amaranthus/archive/2012/11/15/2771523.html

告别卡死!PoolMon+RAMMap组合拳排查Windows非分页泄漏 本文详细介绍了如何利用微软官方工具PoolMonRAMMap诊断Windows系统中隐蔽的非分页内存泄漏问题。通过分析内存标签、交叉验证内存使用情况,并定位到具体的驱动程序文件,帮助系统管理员有效解决因内核驱动泄漏导致的系统卡死或蓝屏故障,提升服务器稳定性。 阅读详情

相关推荐

PCL Trimmed ICP实现点云精配准【2025最新版】

博客长期更新,本文最新更新时间为:2025年6月25日。抄袭狗记得来抄最新代码哦,抄都抄成错的,不够丢人钱。

点云侠的博客 37万+

Nonpaged Pool(未分页)占用内存过多分析定位

Nonpaged Pool(未分页)占用内存过多分析定位 问题定位用到三个小工具:RAMMap、Poolmon、Strings.exe 背景:接到项目反馈,应用服务器内存占用达到80%以上,w3wp占400M,剩余的11G内存跑哪里去了呢,任务管理器看不到,但是可以看到Nonpaged Pool(未分页)占用内存很多。非产品问题本应该由客户管理员去解决,但问题原因之前微软case案例相似,邮...

weixin_40188600的博客 1万+

Freeswitch 如何检测链路是否有回铃音

Freeswitch回铃音检测解决方案 问题描述:呼叫手机时,虽然信令正常(183/180),但部分手机无回铃音,导致坐席无法判断是否接通,用户体验差。 解决方案: 先播放本地音频作为回铃音 实时检测用户侧是否有声音输入 检测到声音后自动切换为用户侧音频 技术实现: 使用Freeswitch APP实现功能 创建结构体保存实例数据(包括铃声文件、会话句柄、VAD检测器等) 通过media bug机制实现音频流的替换 利用VAD(语音活动检测)技术监控用户侧声音 当检测到用户说话时自动终止本地铃声播放 该方案

2301_81507069的博客 32

PagedPool NoPagedPool的区别

PoolType在MSDN的介绍上有N种, 其实常用的只有2种:PagedPoolNonPagedPoolPagedPool分页内存,简单来说就是物理内存不够时,会把这片内存移动到硬盘上,而NonPagedPool是无论物理内存如何紧缺,都绝对不把这片内存的内容移动到硬盘上。 在往下讲之前,先补充一个知识, 就是我们操作的内存,都是虚拟内存,物理内存是两码事。 但虚拟内...

EmbeddedCoder 的CSDN博客 2263

NonpagedPool占用内存过多

原文链接:Nonpaged Pool(未分页)占用内存过多分析定位_苗苗的小鲜肉呀的博客-CSDN博客 1、查看内存占用情况。 process explorer 查看父进程,监控进程资源使用量。 procmon 监控进程 RAMMap 监控进程内存使用 PoolMonX 查看内存占用pool的最高tag 2、在命令行中找到对应组件或应用。 c: cd\ findstr /m /l /s <tag> *.sys #<tag>替换为查找到的最高tag。 问题定位用到三个..

Kaifei.S的博客 3907

修改非分页内存大小及禁用Null会话内存共享

修改非分页内存大小[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] 修改:NonPagedPoolSize的十进制数值(如修改为192)修改Null会话内存共享[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Null]

sdhongjun的专栏 2172

Windows11非分页缓冲泄露排查方法以及运行内存占用高解决方案(HP解决方法)

本文记录了Windows 11系统下非分页缓冲内存泄漏问题的排查过程。作者发现睡眠后系统卡顿,经检查发现16GB内存中非分页缓冲占用高达12GB。通过RamMapPoolMon工具分析,锁定问题源自Realtek网卡驱动(rtlf标签)的内存泄漏。尝试重装驱动、禁用NDU服务等措施均未彻底解决问题。目前只能通过重启暂时缓解,仍在寻求根本解决方案。文章详细介绍了工具使用方法排查步骤,为类似问题提供了参考案例。

2402_87612161的博客 5439

高达 7GB 的 Windows 非分页缓存内存泄露解决方法

摘要:电脑开机后内存异常占用,任务管理器显示非分页缓存高达6.9GB。使用RamMap确认内存泄露,PoolMon工具发现可疑标签"RPp",但无法直接关联驱动。通过Process Explorer列出第三方驱动,采用排除法锁定网易MuMu模拟器为元凶。完全卸载并重启后,内存泄露问题解决。整个诊断过程涉及多个系统工具,最终通过"卸载-重启-观察"的循环验证成功定位问题。

qq_42683499的博客 2589

非页面缓冲占用过高处理方法

电脑运行变得非常卡,经过排查发现内存占用异常。大部分内存被非页面缓冲给吃掉了,经过处理,非页面缓冲被释放掉,电脑内存恢复如初。

Joshua的博客 5850

非页面内存泄漏

分页管理器把地址空间划分成4K大小的页面(非Intel X86体系之不同),当进程访问某个页面时,操作系统首先在Cache中查找页面,如果该页面不在内存中,则产生一个缺页中断(Page Fault),进程就会被阻塞,直至要访问的页面从外存调入内存中。但是调用了海康大华的sdk连接镜头。非分页内存增加,而不是应用层内存增加,则很可能是sdk有内核层的代码出现内存泄露,而调试方法你大可以用windbg来双机调试,当然,不应当在生产机器上,可以在虚拟机中同样执行这些程序,通过windbg来详细调试的。

全粘工程师 1519

x64内核内存空间结构

0x00 前言 本文主要是讨论Windows 7 x64下的内核虚拟地址空间的结构,可以利用WiinDBG调试的扩展命令"!CMKD.kvas"来显示x64下的内核虚拟地址空间的整体布局。了解内核的地址布局在某些情况下是很有的,比如说在研究New Blue Pill的源码虚拟化的时候。 0x01 基本结构 X64的CPU的地址为64位,但实际上只支持48位的虚拟地址空间供软件使用。虚拟地址...

weixin_30872733的博客 465

WIN11内存占用很高,任务管理器也找不到原因

win11运行内存占用高,我来提供众多方法中的一个,希望能帮助到各位

weixin_53293569的博客 2万+

Windows10内存泄漏,分页高分析及解决方案

win10 内存泄漏,查不到对应进程,最全的解决方案 开发人员 应用人员适用

qq_25231249的博客 2万+

mysql-connector-java-5.1.42.jar

该资源为mysql-connector-java-5.1.42.jar,欢迎下载使用哦!

上一篇: 在SQLSERVER中,决定当前会话的SET配置(翻译)[转]
下一篇: [转]SQLSERVER 18056 错误
dida4700
博客等级 码龄10年 4粉丝 115原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值