MaxConnectionsPerChild 是 Apache Prefork/Worker MPM 中控制子进程处理连接数后自动退出的关键参数,用于预防内存泄漏累积,建议设为 200–500 并配合 KeepAliveTimeout≤5、MaxKeepAliveRequests 和 MaxRequestWorkers 合理调优。

优化 Apache 进程池回收速率,核心不是“加快回收”,而是**让子进程在内存积累到危险程度前主动退出并释放资源**——这本质是预防内存泄漏持续恶化,而非事后清理。
调整 MaxConnectionsPerChild(关键参数)
Apache 2.4+ 中用 MaxConnectionsPerChild 替代旧版的 MaxRequestsPerChild,它控制每个子进程处理多少连接后就自动退出。设得太小会增加进程创建开销;太大则可能让泄漏累积过久。
- 默认值通常是 10000,对高负载或含 PHP/Perl 模块的站点偏高
- 建议从 200–500 开始测试:比如
MaxConnectionsPerChild 300 - 观察
server-status页面中各子进程的Req(已处理请求数)和PID生命周期,确认退出节奏是否平稳
配合 KeepAlive 和超时设置降低单进程压力
KeepAlive 虽节省连接建立开销,但若超时过长,会让一个子进程长时间挂起、持续占用内存却无实际工作。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 启用 KeepAlive:
KeepAlive On - 缩短超时:
KeepAliveTimeout 2(单位秒,不建议超过 5) - 限制并发请求数:
MaxKeepAliveRequests 50(避免单连接拖住进程太久)
限制并发规模,避免子进程数量失控
子进程过多本身就会放大内存总量占用,尤其当每个进程都存在微小泄漏时。
- 根据物理内存和平均进程 RSS 合理设置
MaxRequestWorkers(如 128–256) - MPM event 模式下注意
ThreadsPerChild和ServerLimit的匹配,避免线程数虚高 - 用
ps aux --sort=-%mem | head -n 10查看实际 Apache 进程内存占用,作为调参依据
搭配内核级内存管理减少被动回收干扰
即使 Apache 进程按时退出,若系统整体内存紧张,仍可能触发直接内存回收(Direct Reclaim),导致响应延迟——这不是 Apache 的问题,但会影响其回收效果。
- 把
vm.swappiness设为 1~5,让内核优先回收 page cache,而非换出 Apache 进程 - 适当调低
vm.dirty_ratio(如 10)和vm.dirty_background_ratio(如 5),避免脏页堆积拖慢写入型请求 - 确保
vm.overcommit_memory=1,允许合理过量分配,避免因严格检查误杀进程

















