Working Set, Paged Pool and Non-paged pool

SQL Server内存管理:Buffer Pool、Plan Cache与动态仲裁机制详解 SQL Server内存管理并非简单配置max server memory即可,其本质是操作系统与数据库引擎协同下的动态资源调度系统。核心在于理解Buffer Pool的LRU缓存机制、Plan Cache的计划重用逻辑,以及Dynamic Memory Arbitrator如何基于Page Life Expectancy、内存压力信号实时调整目标内存。该机制决定了SQL Server在OLTP高并发与OLAP大扫描场景下的性能分水岭——内存不足将直接引发物理I/O飙升、查询溢出tempdb及编译风暴。实际 阅读详情

Working Set

The working set of a process is the set of pages in the virtual address space of the process that are currently resident in physical memory. The working set contains only pageable memory allocations; nonpageable memory allocations such as Address Windowing Extensions (AWE) or large page allocations are not included in the working set.

When a process references pageable memory that is not currently in its working set, a page fault occurs. The system page fault handler attempts to resolve the page fault and, if it succeeds, the page is added to the working set. (Accessing AWE or large page allocations never causes a page fault, because these allocations are not pageable .)

查看工作集可以知道进程稳定运行时需要使用多少的物理内存。


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.

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.

非换页池是系统中极其重要的资源,非换页池的内存紧张会导致系统各种异常行为,例如http.sys会拒绝请求,从而IIS无法对外提供服务,C:\Windows\System32\LogFiles\HTTPERR 中会记录Connections_Refused。代表内核 NonPagedPool 内存已下降到 20MB 以下,http.sys 已停止接收新连接。


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.

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.


最简单的查看系统进程相应的内存信息的方式是打开task manager - 然后选择working set, paged pool, non-paged pool列来查看每个进程的使用情况。


下面一段程序也可以输出系统运行的进程中相应的working set, paged pool, non-paged pool信息。

#include <windows.h>
#include <stdio.h>
#include <psapi.h>

// To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS
// and compile with -DPSAPI_VERSION=1

void PrintMemoryInfo( DWORD processID )
{
    HANDLE hProcess;
    PROCESS_MEMORY_COUNTERS pmc;

    // Print the process identifier.

    printf( "\nProcess ID: %u\n", processID );

    // Print information about the memory usage of the process.

    hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                    PROCESS_VM_READ,
                                    FALSE, processID );
    if (NULL == hProcess)
        return;

    if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
    {
        printf( "\tPageFaultCount: 0x%08X\n", pmc.PageFaultCount );
        printf( "\tPeakWorkingSetSize: 0x%08X\n", 
                  pmc.PeakWorkingSetSize );
        printf( "\tWorkingSetSize: 0x%08X\n", pmc.WorkingSetSize );
        printf( "\tQuotaPeakPagedPoolUsage: 0x%08X\n", 
                  pmc.QuotaPeakPagedPoolUsage );
        printf( "\tQuotaPagedPoolUsage: 0x%08X\n", 
                  pmc.QuotaPagedPoolUsage );
        printf( "\tQuotaPeakNonPagedPoolUsage: 0x%08X\n", 
                  pmc.QuotaPeakNonPagedPoolUsage );
        printf( "\tQuotaNonPagedPoolUsage: 0x%08X\n", 
                  pmc.QuotaNonPagedPoolUsage );
        printf( "\tPagefileUsage: 0x%08X\n", pmc.PagefileUsage ); 
        printf( "\tPeakPagefileUsage: 0x%08X\n", 
                  pmc.PeakPagefileUsage );
    }

    CloseHandle( hProcess );
}

int main( void )
{
    // Get the list of process identifiers.

    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    {
        return 1;
    }

    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the memory usage for each process

    for ( i = 0; i < cProcesses; i++ )
    {
        PrintMemoryInfo( aProcesses[i] );
    }

    return 0;
}


Windows 11内存占用高?深度解析隐藏内存与实战优化指南 内存管理是操作系统核心功能,它通过虚拟内存、缓存和缓冲池等机制,高效协调物理内存与存储设备间的数据交换,以提升系统整体性能与响应速度。其技术价值在于平衡速度与容量,通过内存压缩、文件缓存等策略,在有限硬件资源下最大化应用运行效率。典型应用场景包括运行大型IDE、虚拟机或多任务处理时,系统会动态分配内存资源。本文聚焦Windows 11中任务管理器显示内存占用高但进程总和偏低的现象,深入剖析其背后原理,并提供从系统缓存、非分页池到驱动程序锁定的全面诊断方法,针对Antimalware Service Exec 阅读详情

相关推荐

Win11内存占用高?从原理到实战的完整优化指南

内存管理是现代操作系统的核心机制,它负责在物理内存、缓存和虚拟内存之间高效分配资源,以提升应用程序的响应速度与整体系统性能。其原理在于通过工作集、分页/非分页缓冲池等机制,平衡进程的即时需求与长期性能优化。理解这一技术价值在于,它能帮助用户区分正常缓存占用与异常内存泄漏,避免盲目优化导致的性能下降。在Windows 11等现代操作系统中,系统服务、后台应用及驱动程序的异常行为是常见的高内存占用应用场景。本文聚焦于解决由系统服务(如SysMain)、第三方进程(如WeChatAppEx)及驱动泄漏引发的内存问

weixin_34072458的博客 592

PagedPool 和 NoPagedPool的区别

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

EmbeddedCoder 的优快云博客 2282

服务器CPU与内存占用异常排查:从原理到实战的完整指南

在操作系统资源管理中,CPU使用率和内存占用是衡量系统健康度的核心指标。其原理涉及用户态与内核态的划分、中断处理机制以及现代内存管理中的缓存策略。理解这些机制的技术价值在于能够准确诊断性能瓶颈,优化资源利用率,避免误判导致的运维决策失误。常见的应用场景包括高负载服务器性能调优、虚拟化环境资源监控以及长时间运行系统的稳定性保障。本文聚焦于系统监控显示资源高占用但进程列表统计不符的典型问题,通过剖析内核态CPU消耗、中断处理以及页面缓存等机制,并结合perf、slabtop等工具链,提供了一套从现象定位到根因分

weixin_30315723的博客 368

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

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

weixin_40188600的博客 1万+

w3wp内存泄漏深度诊断:托管堆与非托管堆协同分析

w3wp进程是ASP.NET应用在Windows Server上的核心宿主,其内存异常往往源于托管堆(Managed Heap)与非托管堆(Unmanaged Heap)的耦合失衡。理解.NET运行时GC机制、对象生命周期及IIS工作进程模型,是定位内存爬升、Finalizer阻塞和句柄泄漏的技术前提。这类问题不体现为编译错误,而是在高负载、长时间运行后触发OutOfMemoryException或线程死锁,典型症状包括私有工作集持续增长但dumpheap显示托管堆稳定——这正是非托管资源未释放的关键信号。

unixboy 465

【信息科学与工程学】【数据中心】 第十四篇 智算中心算法体系规划

每个节点独立计算本地对偶变量的次梯度,通过异步通信更新对偶变量,步长选择采用自适应策略(如ηt​=t​η0​​)。:采用L1(内存缓存)、L2(SSD缓存)、L3(磁盘缓存)三级缓存架构,结合LRU/LFU算法实现动态缓存管理。:靠近用户终端(如基站、小区),仅缓存高频访问内容,部署在用户最近的网络边缘,实现"最后一公里"加速。:存储完整内容库,负责内容注入与全局调度,部署在核心数据中心,具备高带宽和高可用性设计。:基于用户IP、运营商、节点负载等实时数据,动态选择最优边缘节点,实现全局负载均衡。

weixin_49199313的博客 828

常用设置

Windows Registry Editor Version 5.00     (加快程序运行速度)[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]"NtfsDisable8dot3NameCreation"=dword:00000000"Win31FileSystem"=dword:00000000"Win9...

草宝虫的博客 1096

动态取得Ntoskrnl.exe导出函数地址

动态取得Ntoskrnl.exe导出函数地址

《Windows Internals》10.1.18 Startup and the registry process:为什么现代 Windows 不再把所有 Hive 都简单塞进 paged poo

摘要 《Windows Internals》10.1.18 节探讨了现代 Windows 引入 Registry 进程的背景与意义。传统模式(Windows 8.1 前)将所有已加载的注册表 Hive(如数百 MB 的 SOFTWARE)直接存入分页池(paged pool),导致内核内存压力剧增。Windows 10 RS4 后,微软通过 Registry 进程和 section-backed 映射优化管理,将 Hive 文件映射到专用进程地址空间,减少对内核池的依赖。此外,启动过程中,SYSTEM Hi

分享 Windows 系统部署、镜像封装、终端管理、故障排查与运维自动化实践,涵盖 Sysinternals、PowerShell 和 AI 工具应用。以真实案例梳理排查思路与解决步骤,让运维经验清晰、可复用。 2万+

EEGNet 网络代码解析与实战复现指南

本文详细解析了EEGNet这一轻量级卷积神经网络的结构与设计思想,重点阐述了其利用深度可分离卷积高效处理脑电信号的原理。文章提供了基于PyTorch的完整代码复现指南,包括网络搭建、数据模拟、训练调试及关键参数解析,旨在帮助读者掌握EEGNet的代码复现技巧,并将其应用于脑机接口等实际场景。

honey的博客 532

EDA虚拟机分享2020版本(Synopsys2020)

EDA虚拟机分享

亦安的数字小站 9176

SQL SERVER 内存分配及常见内存问题 简介

一、问题: 1、SQL Server 所占用内存数量从启动以后就不断地增加:       首先,作为成熟的产品,内存溢出的机会微乎其微。对此要了解SQL SERVER与windows是如何协调、共享内存。并且SQL SERVER的内部对内存的管理机制。 2、在Windows 2003以上版本运行的SQL Server,内存使用量突然急剧下降:      内存是Sqlserver的生命线。在...

weixin_33958585的博客 118

【FnOS飞牛云 | NAS存储】旧电脑不吃灰,手把手教你搭建完全属于自己的私人网盘

打造属于自己的NAS私人网盘,亲测有效,值得一试

木子Linux的博客世界 9412

深入解析x64架构9-9-9-9-12分页机制:从虚拟内存到物理地址转换

虚拟内存是现代操作系统的核心机制,它通过分页技术为每个进程提供独立的地址空间,实现内存隔离与保护。其基本原理是将虚拟地址转换为物理地址,这一过程依赖于多级页表结构。在x64架构中,9-9-9-9-12分页是标准实现,它将48位虚拟地址划分为五部分,通过四级页表逐级索引,最终定位到4KB物理页面。这种设计不仅支撑了内存超售和共享内存等高级特性,还通过TLB缓存优化了翻译性能。理解分页机制对于系统编程、驱动开发和性能调优至关重要,尤其是在处理缺页异常、内存映射文件和写时复制等场景时。本文以Windows x64

weixin_30338497的博客 382

开源数字人、虚拟直播部署教程

对,你无看错,是欧美的。在直播带货案例里,我们把模型导入到ue4,我们给模型在ue4里预设了四个动作(站着、站着说话、坐着、坐着说话),三个表情(平静、开发、愤怒),三个镜头(全局、近矩说话、看显示器播放商品展示)。我们只需要把目标主播的直播给录制下来,提取样本数据,然后训练一个从粉丝的不同刺激的组合,到主播的不同响应方式的多元逻辑回归的数学模型参数即可。

南七小僧的学海无涯 4557

论文工具——写论文好用的绘图工具(甘特图+流程图+网络模型图+泳道图)

* 在写HiFi-GAN论文的代码阅读过程中,我发现仅仅通过文字来描述网络结构,不够详细,所以想绘制出网络结构图,更加具象化的描述出网络结构。想去花了,才发现之前都是通过在线绘图网站画的,费时费力,所以想找一些专门的网站化出比较规范并且高质量的图。一方面是为了方便讲解,提高论文的质量,另外一方面也是为了以后写论文打下良好的基础。 * 这篇文章会根据我以前的画图经验展开,以前是使用绘图软件,手动绘图。后来,看到了其他的方法,但是需要写一些代码,或者需要安装特定的软件,投入成本太大,就没有学。所以,本文分享的工

Blackoutdragon的博客 1万+

Windows API 函数

《Windows API函数手册》摘要 本文档是Windows平台开发的权威参考手册,全面收录774个核心API函数,涵盖系统管理、进程线程、窗口消息、文件操作、图形处理等12大功能模块。手册采用结构化编排,主要特点包括: 编码规范 详细区分多字节(char)与宽字符(wchar_t)编码体系 提供LPSTR/LPCWSTR等字符串指针类型的完整解析 说明UTF-8与GBK编码转换的实际应用场景 核心功能模块 窗口创建:完整展示从注册类到消息循环的窗口生命周期 文件操作:覆盖CreateFile/ReadF

gqk01的博客 861

Spring-AI 第 17 章 - 飞书机器人接入详解

✅ Stream 长连接(官方 SDK)✅ AI 对话(支持工具调用)✅ 消息接收与回复✅ 天气查询✅ 数据库查询✅ 数学计算✅ 事件去重Stream 长连接模式:使用官方 SDK 建立 WebSocket 长连接,服务器主动连接飞书,无需公网 IP消息处理流程:接收消息 → 解析内容 → AI 处理 → 回复用户AI 工具调用:接入 FunctionTools,支持天气、计算、日期、数据库查询等多种工具。

AppBlog.CN全栈架构 210

NonpagedPool占用内存过多

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

Kaifei.S的博客 3941

OpenCV实例(八)车牌字符识别技术(三)汉字识别

相较于数字和英文字符的识别,汽车牌照中的汉字字符识别的难度更大,主要原因有以下4个方面:(1)字符笔画因切分误差导致非笔画或笔画流失。(2)汽车牌照被污染导致字符上出现污垢。(3)采集所得车辆图像分辨率低导致多笔画的汉字较难分辨。(4)车辆图像采集时所受光照影响的差异导致笔画较淡。综合汉字识别时的这些难点来看,很难被直接提取的是字符的局部特征。笔画作为最重要的特征而仅存在于汉字中,这由先验知识可知。一旦捺、横、竖、撇这些笔画特征被提取到,对于汉字字符识别的工作就完成了许多。

小幽余生不加糖 1649

浅谈银行内部户治理

为避免该问题的发生,对内部户入账类交易,或内部户是可透支的账户(如系统间往来),可考虑通过异步方式更新账户余额(当然,根本上还是要考虑银行业务量的实际,异步消息接口很多时候没有同步接口方便),另外,在进行内部户余额更新时,可以通过定时的借贷方发生额轧差的方式,将多次的锁请求,简化为一次(当然,发生额明细本身在加工账户交易历史时,是不能汇总的)。内部户在银行系统中,属于业务属性较少,实现相对简单,原理也很容易讲清的系统,但管中窥豹,越是基础的东西,越能看出一家银行业务、内控的专业程度。

银行信息系统应用架构详解 786

Windows非分页缓冲池内存使用率较高的问题

新钛云服已累计为您分享782篇技术干货问题描述有一台Windows Server 2019的服务器部署在阿里云上,通过持续观察,其内存使用率始终保持在90%以上,并且其中没有占用内存高的进程。重启服务器后,内存使用率降至低位,但是在一周时间内,再次增至90%以上,尝试增加服务器内存后,此问题依旧存在。‍‍‍通过任务管理器的性能页查得非分页缓冲池有7.7G,其在正常情况下很少超过200-400MB。...

NewTyun的博客 2862

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

关于内存的最后一个难点--the paged and the non-paged pool

很怀疑下面的英文单词precent and procent都是PERCENT的笔误。 也就是这两个POOL,都可以增长,都是在可用内存里的。 但区别是PAGED增长到LIMIT后,会移入PAGEFILE.SYS. 而NON-PAGED长驻内存,增长到LIMIT后可能系统会出现异常。 然后,它们都只会占用一定比例的可用内存。 最后,问题来了:既然NONE-PAGED长驻内存,那为什么又要计...

weixin_30835649的博客 567

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: .NET线程同步问题的调试方法
下一篇: C#实现的自定义IIS认证模块
WebDebug
博客等级 码龄14年 17粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值