pagefile.sys 能删吗?Windows 虚拟内存大小与位置配置指南
前几天帮同事看一台笔记本C盘只剩3GB空间他打开此电脑一看根目录躺着一个16GB的 pagefile.sys第一反应就是这玩意儿一看就是垃圾删了不就完了。手动删被系统拒绝之后他转头在网上找了个一键清理系统隐藏文件的脚本照着执行了。重启之后的故事很经典Chrome 开十几个标签就开始弹内存不足某个修图软件打开大图直接闪退最离谱的是蓝屏一次之后连个转储文件都没留下排查全靠猜。这篇就围绕 Windows 里的分页文件pagefile.sys把话说清楚它是什么、谁在用它、什么情况下真的可以动它、动的时候该按什么顺序来。不管你是刚学会看任务管理器的新手还是天天泡在虚拟机和容器里的老手看完至少能自己判断我这台机器到底该不该留它、留多大、放在哪块盘。1. 从C盘根目录那个巨大的隐藏文件说起1.1 pagefile.sys 是 Windows 的内存溢出缓冲区但它不是可有可无的先把定义摆正pagefile.sys 是 Windows 的分页文件也就是虚拟内存落到硬盘上的那部分实体。它默认位于系统盘根目录属性是隐藏 系统所以在资源管理器里要勾上显示隐藏文件才能看见。它的存在意义很直白——物理内存条是固定的一块而进程申请的虚拟地址空间往往是物理内存的好几倍中间那个差额就需要一块地方来兜底这块地方就是分页文件。很多人把它类比成 Linux 的 swap 分区这个类比方向没错但有个关键差异Linux 的 swap 是一个独立分区或者交换文件格式和文件系统分开管Windows 的分页文件就是一个普通路径下的巨型文件受 NTFS 管辖可以被系统动态伸缩也可以被搬到别的卷上。理解这一点很重要因为它决定了后面所有操作——你在虚拟内存对话框里改的其实是一份路径 初始大小 最大值的配置清单系统盘上的那个文件只是清单里的一项。还有一点新手最容易误解pagefile.sys 并不是内存用满了才开始工作。任务管理器里那个内存压缩进程以及系统后台的页面调度都可能在内存看起来还很宽裕的时候就往分页文件里写东西。所以你看到内存占用只有 50% 却仍然有磁盘上的分页活动这属于正常现象不是故障。1.2 虚拟内存真正在干的三件事把分页文件的作用拆开看其实分三件事理解了这三件事你就能自己判断删除它的后果。第一件是给提交内存兜底。每个进程申请内存时系统会先记一笔账叫提交Commit只有真正写入数据时才分配物理页。系统允许的提交总量上限叫提交限制它约等于物理内存加上所有分页文件的大小之和。这就解释了为什么内存占用只有 70% 却会报内存不足——报错的其实是提交账本超了不是物理内存满了。第二件是承载不那么常用的页面。内存里有一些页是改过但暂时没人读的比如你切到后台很久没动的编辑器、挂在后台的聊天工具。系统可以把这些页写进分页文件把物理内存腾给正在前台干活的程序。等到那个后台程序再被切回来再读回内存。这套机制叫主动分页它的存在让前台程序能拿到更多可用内存是有正面价值的不是性能损耗。第三件是支撑崩溃转储。蓝屏时系统要把内存内容写到硬盘上供事后分析这个落点就在分页文件或者专用转储文件里。你把分页文件全关了蓝屏就只剩一个错误码没有转储可看。对个人用户来说这可能只是排查麻烦对公司里做运维的人来说这等于丢掉了唯一的现场证据。1.3 物理内存、提交内存、分页文件三者是一本账这三个概念混在一起讲最容易乱我用一本账的方式说清楚。物理内存是手头的现金能立刻花掉提交内存是已经签出去的欠条总额包含现金加上随时可以从别处调来的钱分页文件就是那个别处也就是备用金库。系统不允许欠条总额超过现金加备用金的总额一旦超过就拒绝新的借款申请应用看到的就是内存不足。在任务管理器→性能→内存里你能看到三行关键数字使用中压缩、已提交、已缓存。注意已提交那一栏是x / y的格式分母就是提交限制。这个分母就是你这台机器内存管理的天花板。把分母压小等于自己把天花板拆低而绝大多数人删 pagefile.sys 的动机只是想省点 C 盘空间这买卖明显不划算。概念在任务管理器哪里看含义能否通过删 pagefile.sys 改变物理内存内存 → 右上角总量内存条实际容量不变使用中内存 → 使用中压缩当前真正占用的物理内存短期略降长期不变已提交内存 → 已提交 x/y已签发的虚拟内存欠条分母直接变小提交限制已提交的分母物理内存 分页文件随分页文件大小变化2. 想删它之前先搞清你缺的到底是空间还是内存2.1 三个数字三分钟判断你的机器是否真的在用分页文件动手之前先做个体检别凭感觉。打开任务管理器→性能→内存记下三个数物理内存总量、使用中、已提交分子和分母。然后打开资源监视器运行框输入resmon切到内存标签看硬错误/秒这一项。判断逻辑是这样的如果已提交的分子长期贴着分母跑比如 15.6/16.0 GB说明你的问题在提交账本删分页文件只会让报错来得更快。如果硬错误/秒长期大于 0 并且持续跳动说明系统真的在读硬盘上的分页内容这时候分页文件的位置和速度就很关键。如果已提交用了不到分母的一半硬错误/秒基本是 0那你的机器压力很轻把分页文件挪个位置或调小上限都可以从容操作。如果 C 盘空间紧张真正的元凶往往不是 pagefile.sys而是 hiberfil.sys、Windows 更新缓存、WinSxS 组件库、还有各种开发工具的缓存目录。后面第 5 章会专门讲这个混淆。这里补一个很多人不知道的坑系统托管的分页文件在系统盘剩余空间不足时是长不起来的。Windows 会留一部分磁盘空间做保护盘快满的时候分页文件就被卡在某个尺寸上不去提交限制也就跟着封顶。所以你看到内存还有 30% 空着却报内存不足的诡异场景根因往往是 C 盘快满了而不是内存条不够。2.2 删除或禁用它之后链路会怎么断禁用分页文件这个选项在界面上是能点到的Windows 只会淡淡提醒一句禁用分页文件后将无法记录调试信息很多人直接忽略。实际后果按概率排序大概是这样第一层是应用层报错。一些程序启动时会一次性预留比较大的虚拟地址空间比如大型 IDE、图像视频处理软件、数据库、JVM 系的应用。物理内存够但提交上限不够它们就起不来或者跑一半崩掉报错文案五花八门从内存不足到无法创建临时文件都有。第二层是系统组件异常。Windows 的性能计数器、部分监控和诊断功能在完全没有分页文件的环境下会出现采集失败。如果你平时用工具盯着 CPU、磁盘、内存曲线突然发现某些计数器读不出来了先检查分页文件配置而不是怀疑工具本身。第三层是崩溃现场丢失。这一层平时看不出来出事的时候才发现代价最大。需要强调的是在系统运行中直接删除 pagefile.sys 是删不掉的文件被内核占用会提示操作无法完成因为文件已在系统中打开。有些教程教你用第三方工具强删或者进 PE 系统删那纯粹是在制造隐患——文件删掉了注册表里的配置项还在系统下次启动发现配置指向的文件不存在行为就变得不可预期。2.3 一键清理类说法为什么不可信网上流传的三行命令释放 20GB 空间这类内容翻来覆去就是拿 pagefile.sys 和 hiberfil.sys 做文章逻辑上有个共同漏洞它们只统计了能腾出多少空间从不统计腾出空间之后拿什么换。一个典型的失真是把 SSD 寿命搬出来当理由说分页文件读写会磨坏固态硬盘。这个说法在十年前机械盘时代有它的历史背景但今天消费级 NVMe 固态的写入寿命TBW普遍在几百 TB 量级而日常使用的分页写入量通常一年也就几 TB 到十几 TB中间差着两个数量级。真正消耗写入量的是大文件拷贝、视频渲染、日志狂刷这些场景不是分页文件。另一个失真更隐蔽把关闭分页文件和关闭虚拟内存混为一谈。虚拟内存是 Windows 内存管理架构的一部分不因为你删了一个文件就消失你删掉的只是它的一个落点系统并不会因此变成纯物理内存模式它只会变得更早开始拒绝内存申请。提示判断一个优化建议是否靠谱就问一句它付出什么代价。只说收益不提代价的基本可以直接跳过。3. 合理做法把页面文件放到正确的位置设成正确的尺寸3.1 三种配置模式怎么选虚拟内存对话框里其实只有三个选择很多人纠结半天其实判断标准很清楚。系统托管是最省心的模式Windows 自己根据内存压力和磁盘空间伸缩。适用于绝大多数家用和办公机器尤其是你不确定自己在干什么的时候。它的缺点是尺寸会变C 盘空间紧张时容易被卡住而且文件占用空间会随着使用习惯浮动。自定义大小要你填初始大小和最大值两个数。适用于两类人一类是 C 盘空间寸土寸金想给它设个上限防止失控增长另一类是想把分页文件整体挪到另一块盘上。设成固定值初始 最大值还有个附带好处文件一次分配到位之后不再变动在机械盘上能减少碎片在固态盘上则无所谓。无分页文件正常情况下不该选。唯一的例外是你有明确的替代方案比如把分页文件放到别的盘上、同时用专用转储文件接住崩溃转储或者机器是一台纯粹的只读终端、跑的东西极其有限。3.2 自定义大小该填多少尺寸这件事网上的说法从内存的 1 倍到内存的 3 倍都有我觉得与其背倍数不如按用途分档。核心原则只有两条上限要留足别绑死提交限制系统盘上的分页文件要保证崩溃转储能落得下。下面这张表是这些年实际用下来比较舒服的区间不是绝对标准按自己机器的负载微调即可物理内存初始大小最大值适用场景说明4~8 GB4096 MB12288~16384 MB小内存机器最容易撞提交上限宁可让它留足增长空间16 GB4096 MB16384~24576 MB办公、开发、多标签浏览器的常见配置32 GB4096 MB32768 MB上限留大一点应对虚拟机和大文件处理的峰值64 GB 及以上2048~4096 MB32768 MB主要留着保证转储和个别软件的内存预留关于崩溃转储的尺寸要求可以记两个粗略门槛完整内存转储需要在系统盘有一个不小于物理内存规模的分页文件或者配置专用转储文件内核内存转储需要的空间小得多通常留到物理内存的三分之一上下就够用。你可以在启动和故障恢复里看到当前选的是哪种转储类型两边对齐设置就行。我个人的常规做法是16GB 内存的机器系统盘给 4GB 初始、16GB 上限用起来大多数时候实际只占用 2~4GB峰值偶尔冲到 8GB 左右同时把转储类型设成内核转储兼顾空间和排查能力。3.3 多盘机器上的放置策略如果你机器上有两块盘位置的选择会直接影响手感。首选还是系统盘所在的固态盘。原因很实际分页文件的读写是随机小块 I/O机械盘在这种负载下延迟高得离谱一旦发生硬错误表现就是整个界面卡住几秒。把分页文件放在慢盘上等于把内存压力的代价放大成卡顿。第二块固态可以作为分担但注意 Windows 会同时使用所有卷上的分页文件并不会因为你放了两份就变成备份它是按需分配负载的。两块盘各放一份对机械盘混合配置的机器来说意义不大反而增加了管理复杂度。不要放在移动硬盘、网络盘、内存盘上。前两个是延迟问题内存盘是逻辑问题——分页文件的角色是物理内存不够时的落点你把它放进物理内存里等于让备用金库也放在现金抽屉里不但没有扩容还白白吃掉一块内存崩溃转储更是无从谈起。3.4 关闭之前必须先确认的三件事如果你确实有理由要关掉系统盘的分页文件先过一遍这三项检查转储配置是否已经改了。到启动和故障恢复里把写入调试信息改成无或者配置专用转储文件注册表HKLM\SYSTEM\CurrentControlSet\Control\CrashControl下的DedicatedDumpFile与DumpFileSize否则蓝屏之后你什么都没有。是否有软件依赖内存预留。数据库、虚拟机平台、容器桌面端、部分游戏启动器都属于这个类别先跑一遍你的日常软件清单再决定。保留至少一份分页文件。就算系统盘不放也要在其他固态盘上留一份且上限别设得太小。注意修改为无分页文件之后设置不会立刻生效需要重启。重启之前文件还在删除时提示被占用是正常的。4. 完整实操链路查看、迁移、验证、回滚4.1 先用命令行把现状摸清楚图形界面只能看到一个大概命令行能看到实际分配值和峰值。管理员权限打开 PowerShell依次跑这几条# 是否处于系统托管状态 Get-CimInstance Win32_ComputerSystem | Select-Object AutomaticManagedPagefile # 当前所有分页文件的位置、已分配大小MB、当前使用、历史峰值 Get-CimInstance Win32_PageFileUsage | Format-List Name, AllocatedBaseSize, CurrentUsage, PeakUsage # 注册表里保存的配置清单 Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management -Name PagingFiles | Select-Object -ExpandProperty PagingFilesPeakUsage这个值特别有用它告诉你从开机到现在分页文件被用得最狠的一次是多少。连续观察几天把峰值乘个 1.5 倍基本就是你的合理上限比拍脑袋填倍数靠谱得多。再看一眼实时的提交情况Get-Counter \Memory\Committed Bytes,\Memory\Commit Limit,\Paging File(_Total)\% UsageCommitted Bytes除以Commit Limit就是提交使用率。这个比值长期高于 80%说明你该加内存条了调整分页文件只能缓解不能治本。4.2 迁移到其他盘并让它生效图形路径是运行sysdm.cpl→ 高级 → 性能设置 → 高级 → 虚拟内存更改。也可以直接运行SystemPropertiesPerformance.exe跳到性能选项。操作顺序建议这样别搞反选中系统盘通常是 C:选择自定义大小先填初始和最大值。选中目标盘比如 D:最好是另一块固态同样设自定义大小初始可以给小一点上限给足。如果确实想让系统盘不再持有分页文件选中 C: 再点无分页文件点设置确认。一路确定重启。有个细节容易踩改完每一条都要点一次设置按钮只点确定退出的话界面上的改动不会写进配置。改完之后用 4.1 里的注册表命令复查一眼PagingFiles的值应该变成类似D:\pagefile.sys 4096 16384这样的形式第一段是路径后两个数字是初始和最大值。4.3 验证是否真的按你设的走重启之后别急着干别的先复查三件事用Get-CimInstance Win32_PageFileUsage看AllocatedBaseSize是不是你设的初始值路径对不对。到目标盘根目录确认文件存在系统盘上那个大文件是否已经不在了如果设置了无分页文件。打开任务管理器看已提交的分母有没有变化。分母变大是一定的如果没变化说明配置没生效回去查第 3 步。然后正常用一两天期间偶尔看一眼PeakUsage和硬错误/秒。如果峰值远低于你设的上限说明设置偏保守但没问题如果峰值贴着上限把最大值再放宽一些。4.4 万一出问题怎么退回去回滚非常简单这也是为什么我一直建议先改位置再考虑减配置。回到虚拟内存对话框系统盘选回系统托管其他盘设成无分页文件重启就回到了出厂状态。有一类情况要注意如果你在设置里把所有盘都设成了无分页文件重启后系统可能仍然会创建一个小尺寸的临时分页文件来保证基本运行也可能完全不创建取决于版本和当前内存压力。这属于系统的自我保护机制不代表你的配置生效了遇到这种半生效状态老老实实恢复系统盘的系统托管别继续折腾。5. 几个被反复误解的细节SSD寿命、休眠文件、内存盘5.1 固态硬盘的写入寿命焦虑用错了地方这个误解传播太广了值得单独说。分页写入的量级和固态硬盘的寿命完全不在一个量级上真正值得关心 SSD 寿命的场景是频繁的大文件读写、持续的视频渲染、数据库高频写入、日志刷盘。分页文件在多数机器上一天也就写几个 GB甚至更少还有内存压缩在中间挡了一层——任务管理器里那个内存压缩进程就是干这个的很多原本要落盘的内容被压缩后留在内存里了。反过来说把分页文件从固态挪到机械盘换来的是更长的随机读延迟和更明显的卡顿。用体验换一个几乎不存在的寿命收益这笔账不划算。5.2 hiberfil.sys 和 pagefile.sys 不是一回事C 盘根目录常见的两个大文件一个hiberfil.sys一个pagefile.sys很多人把它们的处理方式混着用。hiberfil.sys是休眠文件用于休眠时保存整个内存镜像同时 Windows 的快速启动功能也依赖它。它的大小通常接近物理内存的 40%~75%所以在 16GB 内存的机器上它可能比分页文件还大。这个文件是可以关的以管理员身份运行powercfg /h off它就会消失代价是失去休眠和快速启动关机变成真正的完整关机。注意区别hiberfil.sys 关了基本不影响程序运行只是启动稍慢一点、不能休眠pagefile.sys 关了会直接影响应用能不能跑起来。想腾 C 盘空间先动休眠文件别动分页文件这个顺序能省掉大量麻烦。5.3 把页面文件放进内存盘是自相矛盾内存盘把一部分内存模拟成磁盘是个很有意思的工具用来放编译缓存、临时文件效果很好但它不适合放分页文件。原因在 1.3 节讲过分页文件是提交账本里物理内存之外的那部分把它塞回物理内存等于账本自己给自己担保提交限制并不会因为这份文件而增加反而白白占用了一部分物理内存还要额外承担内存盘驱动本身的稳定性风险。同理那些号称把分页文件放到内存盘加速的教程实际效果通常是整体可用内存变少遇到内存压力时崩溃得更早。5.4 小内存机器跑容器和虚拟机的配置思路现在开发机上跑 Docker 桌面端、WSL、本地虚拟机的场景很常见这几类负载的共同特点是提交内存用量远超物理内存因为它们启动时会预留大块虚拟地址空间。8GB 或 16GB 内存的机器上这类负载最容易撞到提交上限。我实际试下来比较舒服的搭配是这样分页文件留在系统固态盘上限给足16GB 内存的机器给到 24GB 上限都不算夸张。内存压缩保持开启别去找关闭内存压缩的教程它会帮你省下不少落盘量。容器和虚拟机的内存上限在配置里主动限制别让它们无限申请。虚拟机的动态内存分配打开容器的--memory参数按需给。如果你经常同时开两个以上的虚拟机优先考虑加内存条而不是继续抠分页文件的尺寸。调整分页文件只能避免报错缓解不了卡。6. 四个真实案例的排查链路6.1 案例一内存占用才 70%却弹内存不足这是最典型的一类也是最容易被误诊的一类。现象是物理内存使用率不高但浏览器和编辑器同时弹内存不足。基本的排查链路是这样走的先看任务管理器的已提交如果分母很小、分子贴着分母第一层结论就出来了——问题在提交限制不在物理内存。接着查分页文件的配置多数情况下会看到三种情况之一被第三方优化软件设成了很小的固定值系统盘被设成了无分页文件C 盘剩余空间不足系统托管的分页文件长不起来。第三种情况最隐蔽因为配置看起来完全正常。验证方法是用命令行看AllocatedBaseSize是不是远小于你的物理内存同时确认系统盘剩余空间。修复方式也很直接清理系统盘腾出空间或者把分页文件上限设成固定值并挪到空间充裕的盘上重启后复查分母是否变大。6.2 案例二关掉分页文件之后蓝屏没有转储可分析这台机器是一台调试用的工作站当时为了减少硬盘写入把系统盘的分页文件关了。后来出现一次蓝屏事件查看器里只有一条重启记录转储目录是空的等于现场完全丢失。这类问题的根因不是蓝屏本身而是转储配置和分页文件的依赖关系断了。排查时先确认启动和故障恢复里的转储类型设置再确认系统盘是否有足够大的分页文件或者专用转储文件。修复有两条路一是恢复系统盘的分页文件并给足尺寸二是保留关闭状态但配置DedicatedDumpFile把转储写到另一个位置。两条路都能走通关键是要明确选一条而不是让系统处在既没有分页文件也没有专用文件的裸奔状态。6.3 案例三迁到机械盘之后整机反而更卡这个案例的动机很朴素听说固态盘写入量宝贵就把分页文件迁到了机械盘。结果日常使用中出现一种很怪的现象——切回后台很久没动的程序时整个界面会僵住一两秒硬盘灯狂闪。定位方式是打开资源监视器看内存标签里的硬错误/秒同时看磁盘队列长度。如果硬错误发生时磁盘队列同时拉高并且对应的是机械盘结论就很清楚了分页 I/O 落在慢盘上延迟被放大成了肉眼可见的卡顿。修复就是把分页文件挪回固态盘机械盘那份直接设成无分页文件。迁回去之后卡顿现象消失这也从侧面说明了一个事实分页文件不只是在内存不够的时候才工作日常调度里它一直在参与。6.4 案例四第三方优化工具留下的后遗症这台机器的故事是同事跑了一键优化工具顺手把分页文件设成了一个很小的固定值。表面上看 C 盘多了十几个 GB实际用起来各种小毛病性能监视器部分计数器读不出来某个数据库客户端偶尔启动失败日志里能看到内存分配相关的失败记录。排查这类问题的关键是不要从症状二层往下追先回到配置层核对。把分页文件的配置、转储配置、系统盘剩余空间三样东西对齐看一遍基本一眼就能发现问题。修复方式就是把系统盘改回系统托管同时把工具里其他优化项也复核一遍——这类工具通常不止改了一项。我自己这些年折腾下来的几条经验最后说点实际的。如果你想省 C 盘空间动手顺序应该是先关休眠文件释放 hiberfil.sys再清 Windows 更新缓存和组件库再考虑各类开发工具的缓存目录最后才轮到分页文件而且分页文件这一步优先做迁移位置和设置上限不是删除。如果你想判断自己该不该调整最省事的办法是连续观察几天PeakUsage和提交使用率。峰值离上限很远你随便怎么设都不太会出事峰值贴上限加内存条比改配置管用提交使用率长期在 80% 以上说明这台机器的负载已经超出它的配置了再怎么调分页文件也只是把报错推迟一点。还有一条很实用的习惯每次改完虚拟内存配置重启后花一分钟跑一遍第 4 章那三条命令确认路径、分配值和提交分母三样东西都对上了。这个动作能挡掉绝大多数以为改了其实没生效的问题包括那个经常被忽略的、改完不点设置按钮的情况。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →