根本原因是Windows提交内存超限:多端口监听增加地址空间占用,pagefile.sys空间不足或位于拥挤的C盘,叠加日志/缓存膨胀导致“虚拟内存不足”,与物理内存是否充足无关。

XAMPP 启动多个 Apache 实例(比如用不同端口跑多个本地站点)时,容易触发“虚拟内存不足”提示,根本原因不是物理内存真不够,而是 Windows 为每个 Apache 进程分配的地址空间受限 + pagefile.sys 所在磁盘空间吃紧,尤其当配置了大量 Listen 端口或启用多个 vhost 且日志/缓存未清理时。
Apache 多端口监听会放大虚拟内存压力
每新增一个 Listen 指令(如 Listen 8080、Listen 8081),Apache 主进程会为每个端口预留独立的 socket 缓冲区和连接队列。这些资源虽小,但叠加后显著增加进程的地址空间占用——Windows 将其计入“提交内存(Commit Charge)”,而该值直接受 pagefile.sys 容量约束。即使物理内存充足,若 pagefile.sys 最大值设为 4GB,而所有 Apache 实例+其他程序的提交内存需求超 4GB,系统就会报“虚拟内存不足”。
- 检查当前提交内存:打开任务管理器 → “性能” → “内存” → 查看“已提交”右侧数值(如“3.8/4.0 GB”)
- Apache 配置中避免无意义的
Listen行,删除不用的端口(如注释掉Listen 8081、Listen 8082) - 改用
NameVirtualHost+ 单端口多域名方式,比开一堆端口更省内存
pagefile.sys 位置和大小必须匹配 XAMPP 使用场景
XAMPP 默认把 Apache 日志、MySQL 数据、PHP 临时文件全堆在 C:\xampp 下,而 Windows 又默认把 pagefile.sys 放在 C 盘。当多端口 Apache 长时间运行,日志滚动生成 + MySQL 缓存膨胀,C 盘剩余空间可能跌破 10%,导致 pagefile.sys 无法动态扩展,直接触发错误。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 不要只调大
pagefile.sys数值,先清空C:\xampp\apache\logs\和C:\xampp\tmp\ - 将
pagefile.sys迁移到空间充足的非系统盘(如 D 盘):进“虚拟内存设置” → C 盘选“无分页文件”,D 盘选“自定义大小”,初始/最大均设为物理内存的 2 倍(如 16GB 物理内存 → 设 32768 MB) - 修改 Apache 日志路径到 D 盘:
httpd.conf中把ErrorLog和CustomLog指向D:/xampp/apache/logs/
mod_php 和 opcache 配置不当会雪上加霜
XAMPP 默认启用 mod_php(而非 PHP-FPM),每个 Apache 子进程都会加载完整 PHP 解释器 + 扩展 + opcache 内存池。开 5 个端口意味着最多可能有 5 × MaxRequestWorkers 个 PHP 实例常驻内存,而 opcache.memory_consumption 默认 128MB,5 个实例就占 640MB,全是提交内存。
- 临时缓解:在
php.ini中把opcache.memory_consumption=64(减半),opcache.max_accelerated_files=4000(原 10000) - 长期建议:改用
php-cgi.exe+mod_fcgid,让 PHP 进程与 Apache 分离,避免每个 Apache 进程重复加载 PHP - 确认
httpd.conf中未重复加载模块,例如同时存在LoadModule php_module和LoadModule fcgid_module且都启用
真正卡住人的地方,往往不是“该不该加内存”,而是没意识到 XAMPP 的多端口模式会让 Windows 的提交内存机制快速见顶——它不看 RAM 多少,只看 pagefile.sys 能不能撑住所有进程申请的地址空间。动手前先看任务管理器的“已提交”值,再决定是清日志、挪分页文件,还是砍掉多余的 Listen 行。

















