threadsperchild是event或worker mpm下每个子进程的固定线程数,prefork模式无效;需配合serverlimit、maxrequestworkers等参数协同调优,推荐值event为25–256、worker为25–75,并依内存与cpu实测确定。

ThreadsPerChild 不是“绑定”线程模型的开关,而是 event 或 worker MPM 模式下每个子进程固定创建的工作线程数。它必须与所选 MPM 协同生效,不能脱离模式单独起作用。
先确认你用的是 event 或 worker 模式
ThreadsPerChild 在 prefork 模式下无效(prefork 是纯进程模型,无“线程”概念)。运行以下命令验证:
- httpd -V | grep -i mpm —— 输出应为 Server MPM: event 或 Server MPM: worker
- 若显示 prefork,需在配置中禁用
mpm_prefork_module,启用mpm_event_module(或mpm_worker_module),并确保 PHP 等动态内容交由 php-fpm 处理(而非 mod_php)
ThreadsPerChild 的合理取值范围
它不是越大越好,而要平衡线程调度开销、内存占用和 CPU 利用率:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- event MPM 推荐:25–256,常见生产值为 64、100、128;可按 CPU 核心数 × 2~4 估算(如 16 核 → 设 64 或 128)
- worker MPM 推荐:25–75,因线程共享进程内存,过高易引发锁竞争或上下文切换抖动
- 超过 256 易导致内核调度压力上升,低于 16 则子进程数增多,增加管理开销
必须同步调优的关联参数
ThreadsPerChild 单独调整无效,需与以下参数协同计算:
-
MaxRequestWorkers:全局最大并发线程数,必须 ≤
ServerLimit × ThreadsPerChild;例如设 ThreadsPerChild=128,则 ServerLimit 至少为 8 才能支持 1024 并发 - MinSpareThreads / MaxSpareThreads:建议分别设为 ThreadsPerChild 的 1.5 倍和 3 倍(如 128 → 192 和 384),保障弹性伸缩不卡顿
- ServerLimit:修改后需重启 Apache 生效,不可动态调整;设太大浪费资源,太小会限制 MaxRequestWorkers 上限
结合硬件与后端反推真实值
避免拍脑袋设值。推荐实测单线程内存占用后倒推:
- 运行 ps aux | grep httpd | grep -v grep | awk '{sum+=$6} END {print sum/NR " KB"}' 得出平均驻留内存(典型值 12–20 MB/线程)
- 若服务器预留 6 GB 内存给 Apache,单线程按 16 MB 计算 → 最多支持约 375 个线程
- 选 ThreadsPerChild = 125 → ServerLimit ≥ 3 → MaxRequestWorkers = 375










