在 CentOS 上(注意:CentOS 默认是 httpd,不是 apache2,apache2 是 Debian/Ubuntu 的叫法),Apache 调优一般从 配置参数、系统内核、模块、缓存、PHP/动态语言 几个方面入手。下面给你一套实用调优清单。
httpd -v
httpd -M | grep mpm
常见 MPM:
✅ 推荐:event(CentOS 7+ 默认)
切换 MPM(如有必要):
vim /etc/httpd/conf.modules.d/00-mpm.conf
启用:
LoadModule mpm_event_module modules/mod_mpm_event.so
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
太长会占用连接,太短会增加 TCP 开销
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 10000
</IfModule>
说明:
MaxRequestWorkers ≈ 并发上限MaxConnectionsPerChild 防止内存泄漏httpd -M
常见可关:
删除或注释:
vim /etc/httpd/conf.modules.d/*.conf
ulimit -n
建议:
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vim /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
生效:
sysctl -p
vim /etc/httpd/conf.d/deflate.conf
AddOutputFilterByType DEFLATE text/html text/css application/javascript
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
</IfModule>
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
减少 IO:
CustomLog logs/access_log combined
# 或关闭不需要的日志
ab -n 10000 -c 500 http://localhost/
✅ event MPM
✅ KeepAlive 5s
✅ 文件句柄 65535
✅ gzip + 缓存
✅ PHP-FPM
✅ 关无用模块
如果你愿意,可以告诉我:
我可以给你一套精确配置。