Windows Server 2022 内存占用不到 70%,工具却提示“内存不足”的原因与解决方案
问题现象
一台 Windows Server 2022 Datacenter 工具服务器,主要用于运行 Chrome、VPN 客户端、远程控制工具、自动化脚本等 GUI 程序。

任务管理器中显示:
物理内存:16.0 GB
当前使用:10.8 / 16.0 GB
内存占用:约 68%
可用内存:约 5.2 GB
已提交:19.5 / 22.0 GB
表面看,物理内存还有 30% 左右没有用完,但工具仍然弹出错误:
没有足够的内存继续执行程序。
System.Windows.Media.Composition.DUCE.Channel.SyncFlush()
System.Windows.Interop.HwndTarget.UpdateWindowSettings()
System.Windows.Interop.HwndTarget.UpdateWindowPos()
…
问题结论
这个问题不是单纯的“物理内存用满”,而是 Windows 提交内存接近上限 导致的。
任务管理器里真正需要重点关注的是:
已提交:19.5 / 22.0 GB
这表示系统当前已经承诺给程序、驱动、图形界面和后台服务的内存额度接近上限,只剩大约 2.5GB 可提交空间。
当某个工具继续申请较大的内存块,或者 WPF/.NET 图形界面需要继续申请渲染资源时,就可能出现“没有足够的内存继续执行程序”。
为什么物理内存还有 5GB,也会提示内存不足?
Windows 里有两个容易混淆的概念:
1. 物理内存
物理内存就是服务器实际安装的 RAM,例如本机是:
16 GB
任务管理器显示的“内存 68%”,主要反映的是物理内存使用情况。
2. 提交内存
提交内存是 Windows 已经承诺给程序使用的内存额度。它不只看物理内存,还会受到页面文件大小影响。
提交上限大致可以理解为:
提交上限 = 物理内存 + 页面文件
本机显示:
已提交:19.5 / 22.0 GB
说明虽然物理内存是 16GB,但页面文件配置偏小,导致总提交上限只有约 22GB。
对于长期运行 Chrome、VPN、自动化脚本、远程桌面、GUI 工具的服务器来说,22GB 的提交上限偏紧。
报错堆栈说明了什么?
错误堆栈中出现:
System.Windows.Media.Composition.DUCE.Channel.SyncFlush()
System.Windows.Interop.HwndTarget.UpdateWindowSettings()
System.Windows.Interop.HwndTarget.UpdateWindowPos()
这类堆栈通常与 .NET / WPF 图形界面渲染有关。
也就是说,工具不是普通命令行程序,而是需要窗口、控件、图形渲染资源的 GUI 程序。GUI 程序长期运行后,可能出现以下问题:
提交内存持续上升
窗口资源占用过多
GDI / User Objects 占用过多
桌面堆资源不足
32 位程序地址空间不足
WPF 渲染资源申请失败
所以即使任务管理器显示物理内存没到 100%,程序仍然可能报内存不足。
最终有效解决方案
本次实际采用的解决方案是:增大 Windows 页面文件。
适合长期跑 Chrome、VPN、自动化工具的服务器配置:
初始大小:32768 MB
最大大小:49152 MB
也就是:
初始页面文件:32 GB
最大页面文件:48 GB
设置完成并重启服务器后,问题成功解决。
页面文件设置路径
操作路径:
此电脑
→ 属性
→ 高级系统设置
→ 性能
→ 设置
→ 高级
→ 虚拟内存
→ 更改
然后执行:
取消勾选:自动管理所有驱动器的分页文件大小
选择系统盘或空间充足的 SSD 磁盘
选择:自定义大小
初始大小:32768 MB
最大大小:49152 MB
点击:设置
点击:确定
重启服务器

如何检查当前页面文件大小?
可以使用 PowerShell 查看:
Get-CimInstance Win32_PageFileUsage | Select-Object Name, AllocatedBaseSize, CurrentUsage, PeakUsage
返回结果里重点看:
AllocatedBaseSize:页面文件已分配大小
CurrentUsage:当前使用量
PeakUsage:峰值使用量
如何排查哪个进程占用提交内存?
打开任务管理器:
任务管理器
→ 详细信息
→ 右键表头
→ 选择列
→ 勾选:提交大小
然后按照“提交大小”排序。
重点检查这些进程:
chrome.exe
VPN 客户端
远程控制工具
python.exe
node.exe
java.exe
dotnet.exe
自动化脚本相关进程
数据库或缓存类进程
也可以使用 PowerShell 查看占用较高的进程:
Get-Process |
Sort-Object -Descending PrivateMemorySize64 |
Select-Object -First 20 Name, Id,
@{Name=“CommitGB”;Expression={[math]::Round($_.PrivateMemorySize64/1GB,2)}},
@{Name=“WorkingSetGB”;Expression={[math]::Round($_.WorkingSet64/1GB,2)}} |
Format-Table -AutoSize
还需要注意 32 位程序限制
如果工具是 32 位程序,即使服务器有 16GB 或更大内存,单个进程也可能因为地址空间限制而报 OutOfMemory。
检查方法:
任务管理器
→ 详细信息
如果进程名后面显示:
*32
说明它是 32 位程序。
优先处理方式:
尽量使用 64 位版本工具
减少单个工具长期运行时间
定期重启工具
避免同时打开大量窗口和标签页
GUI 自动化服务器的优化建议
这类服务器长期跑浏览器、VPN、自动化工具时,建议做以下优化:
1. 页面文件设置为 32GB - 48GB
2. Chrome 每轮任务后清理多余标签
3. 每隔一段时间重启 Chrome
4. 每隔一段时间重启 VPN 客户端
5. 自动化脚本异常退出时清理残留进程
6. 不要同时开启多个远程桌面会话
7. 定期注销不用的 Windows 用户会话
8. 定期检查任务管理器里的“提交大小”
9. 长期任务建议分批执行,避免 GUI 资源持续泄漏
临时恢复方案
如果已经弹出“内存不足”,可以先这样处理:
1. 关闭当前报错工具
2. 关闭 Chrome 多余标签
3. 退出 VPN / 加速器客户端
4. 检查是否有残留 chrome.exe、python.exe、dotnet.exe 等进程
5. 重启工具
6. 如果仍然报错,重启服务器
7. 重启后立即增大页面文件
本次问题的最终原因总结
本次问题的核心原因是:
物理内存占用不到 70%,但提交内存已经达到 19.5 / 22.0GB
也就是:
页面文件偏小
提交内存接近上限
工具是 .NET / WPF 图形界面程序
服务器长期运行 Chrome、VPN、自动化工具
GUI 资源和提交内存压力较高
最终通过设置:
初始大小:32768 MB
最大大小:49152 MB
成功解决工具提示“没有足够的内存继续执行程序”的问题。
适用场景
这套处理方法适合以下服务器:
Windows Server 2019
Windows Server 2022
Windows 10 / Windows 11 工具机
长期运行 Chrome 的自动化服务器
长期运行 VPN / 代理 / 加速器的服务器
长期运行 RDP / VNC / NoMachine 的 GUI 服务器
长期运行 .NET / WPF 图形工具的服务器
建议配置
如果服务器内存是 16GB,且长期运行 GUI 自动化任务,建议页面文件设置为:
初始大小:32768 MB
最大大小:49152 MB
如果服务器内存是 32GB,可以根据任务压力设置为:
初始大小:32768 MB
最大大小:65536 MB
如果磁盘空间充足,工具又需要长期无人值守运行,可以适当提高最大值。
最终建议
不要只看任务管理器里的“内存百分比”。
遇到 Windows 工具提示内存不足时,应重点检查:
已提交
提交上限
页面文件大小
提交大小最高的进程
是否为 32 位程序
GUI 窗口数量
Chrome 标签数量
GDI / User Objects 是否异常
对于工具服务器,页面文件不是越小越好。Chrome、VPN、远程桌面、自动化脚本同时运行时,适当增大页面文件可以显著提高稳定性。