在 CentOS 上提升 Apache(httpd)并发能力,一般从 操作系统参数、Apache 配置、MPM 模式、PHP/后端优化 几个方面入手。下面给你一套实战型优化方案(适用于 CentOS 7/8,Apache 2.4)。
Apache 并发能力 80% 取决于 MPM(Multi-Processing Module)。
httpd -V | grep MPM
# 或
apachectl -V | grep MPM
常见模式:
生产环境强烈建议使用 event
vim /etc/httpd/conf.modules.d/00-mpm.conf
确保只有下面这行生效:
LoadModule mpm_event_module modules/mod_mpm_event.so
注释掉:
# prefork
# worker
systemctl restart httpd
编辑:
vim /etc/httpd/conf/httpd.conf
或新建:
vim /etc/httpd/conf.d/mpm.conf
<IfModule mpm_event_module>
ServerLimit 16
StartServers 4
ThreadLimit 256
ThreadsPerChild 256
MaxRequestWorkers 4096
MinSpareThreads 128
MaxSpareThreads 512
MaxConnectionsPerChild 10000
</IfModule>
| 参数 | 作用 |
|---|---|
| MaxRequestWorkers | 最大并发请求数(核心) |
| ThreadsPerChild | 每个进程线程数 |
| ServerLimit | 最大进程数 |
| MaxConnectionsPerChild | 防止内存泄漏 |
✅ 并发 ≈ MaxRequestWorkers
vim /etc/security/limits.conf
追加:
* soft nofile 65535
* hard nofile 65535
立即生效:
ulimit -n 65535
vim /etc/sysctl.conf
追加:
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
生效:
sysctl -p
KeepAlive 会占用连接,高并发要限制。
KeepAlive On
KeepAliveTimeout 3
MaxKeepAliveRequests 100
高并发场景建议 KeepAliveTimeout ≤ 5
httpd -M
禁用不用的模块(如 WebDAV、CGI、autoindex):
vim /etc/httpd/conf.modules.d/*
mod_phpvim /etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 200
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 40
yum install httpd-tools -y
ab -n 10000 -c 500 http://localhost/
关注:
| 现象 | 原因 |
|---|---|
| 并发上不去 | 使用 prefork |
| 502 | PHP-FPM 不够 |
| 连接卡住 | KeepAlive 太长 |
| 内存爆 | MaxRequestWorkers 太高 |
如果你愿意,可以告诉我:
我可以 直接给你一套“定制并发配置”。