XAMPP Windows版默认使用mpm_winnt模块,其线程数固定为150且不可修改;如需调整并发能力,必须禁用mpm_winnt、启用mpm_event模块,并在<IfModule mpm_event_module>中配置StartServers、ThreadsPerChild和MaxRequestWorkers等参数。

Apache线程数在哪改?不是在 httpd.conf 里直接调 ThreadsPerChild
很多人搜“XAMPP Apache 线程数”,直接打开 httpd.conf 找 ThreadsPerChild,结果发现压根没这行——因为 XAMPP 默认用的是 mpm_winnt(Windows 下的 MPM 模块),它不支持 ThreadsPerChild,只认 ThreadsPerChild 的等价配置项 ThreadsPerChild?错,其实是 ThreadsPerChild 在 mpm_winnt 下被重命名为 ThreadsPerChild?也不对。
真实情况是:mpm_winnt 只有一个线程控制参数:ThreadsPerChild 不存在,真正起作用的是:ThreadsPerChild?不,是 ThreadsPerChild?停——查官方文档:Windows 下 mpm_winnt 唯一可调的并发线程参数是 ThreadsPerChild?还是 MaxRequestWorkers?
答案:XAMPP Windows 版默认启用 mpm_winnt,它采用单进程多线程模型,**只允许设置 ThreadsPerChild,且该值固定为 150(不可改)**。你改了也没用,Apache 启动时会忽略自定义值并强制设回 150。
所以结论很直接:Windows 下 XAMPP 的 Apache 无法通过修改线程数提升并发能力。这不是配置疏漏,是 mpm_winnt 的硬限制。
想真正提高并发,必须切换到 mpm_event 或 mpm_worker
Windows 下也能用 mpm_event,但 XAMPP 安装包默认不启用,需要手动启用模块并禁用 mpm_winnt。操作前先确认你的 Apache 版本(XAMPP 8.2+ 内置 Apache 2.4.54+ 才完整支持 mpm_event on Windows)。
实操步骤:
- 打开
apache/conf/httpd.conf,注释掉这一行:LoadModule mpm_winnt_module modules/mod_mpm_winnt.so - 取消注释这一行:
LoadModule mpm_event_module modules/mod_mpm_event.so - 在
httpd.conf底部或extra/httpd-mpm.conf中添加配置块:
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
注意:MaxRequestWorkers 是总并发连接上限(≈同时处理请求数),它 = StartServers × ThreadsPerChild 的理论上限,但实际受系统资源制约。设太高会导致内存溢出或 Apache 拒绝启动。
常见错误现象:httpd.exe: Syntax error on line ... Invalid command 'MaxRequestWorkers' → 说明 mpm_event 没成功加载,检查是否遗漏 LoadModule 或模块路径写错。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
MaxRequestWorkers 设多少才合理?看物理内存和请求类型
每个 Apache 线程平均占用 2–8 MB 内存(取决于 PHP 加载模块、数据库连接池等)。假设你机器有 4 GB 可用内存给 Apache,保守按 5 MB/线程算,4000 ÷ 5 ≈ 800 线程上限。但 XAMPP 是开发环境,没必要顶格设。
推荐起步值:
- 纯静态文件 + 小量 PHP(如本地 WordPress 测试):
MaxRequestWorkers 150 - 含 MySQL 连接、Composer autoload、较多扩展的 Laravel/ThinkPHP 项目:
MaxRequestWorkers 200–250 - 跑压测或模拟高并发调试:
MaxRequestWorkers 300,但务必监控任务管理器中httpd.exe内存增长,超 1.2 GB 就要降
关键提醒:MaxRequestWorkers 不是越大越好。设 500 后 Apache 启动失败?大概率是 Windows 用户态堆耗尽(ERROR_CODE 0xc0000017),这时得同步调小 ThreadsPerChild(比如从 25 改成 16)来降低单进程线程密度。
改完配置后 Apache 启不来?90% 是模块冲突或语法错误
XAMPP 对模块加载顺序敏感。启用 mpm_event 后,如果还保留 mod_php(即 php_module),会直接报错退出,因为 mpm_event 要求 PHP 运行在外部 CGI/FastCGI 模式。
必须做的配套调整:
- 注释掉
LoadModule php_module modules/libphp.so(Linux)或php8apache2_4.dll(Windows) - 启用
mod_proxy_fcgi和mod_proxy(确保已取消注释这两行) - 在虚拟主机配置中改用
SetHandler "proxy:fcgi://127.0.0.1:9000"或使用php-cgi.exe直连(XAMPP 自带php-cgi.exe在php/目录下)
验证是否生效:启动 Apache 后访问 http://localhost/xampp/phpinfo.php,搜索 Server MPM,显示 event 才算成功;若仍显示 winnt,说明模块加载失败或配置未生效。
最后提醒一句:XAMPP 本质是本地开发套件,它的 Apache 配置优化空间有限。真要压测或跑高并发服务,别卡在改 XAMPP 上,换 Docker + Nginx + PHP-FPM 组合更可控,也更接近生产环境。

















