在 CentOS 上优化 Apache(通常是 httpd,而非 apache2,apache2 是 Debian/Ubuntu 的叫法) 性能,一般从 系统层面、Apache 配置、模块、缓存、PHP/应用层 几个方面入手。下面给你一套实用优化方案(以 CentOS 7/8 + Apache 2.4 为例)。
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 1000000
生效:
sysctl -p
# /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
httpd -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
示例(event):
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 10000
</IfModule>
MaxRequestWorkers 不要超过内存承受范围
httpd -M
常见可关闭:
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
</IfModule>
CustomLog logs/access_log combined
# 高并发可改为
CustomLog /dev/null common
Apache 只跑动态(PHP),Nginx 做前端
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
ab -n 10000 -c 500 http://localhost/
top
htop
ss -ant | wc -l
Nginx (静态 + 反向代理)
↓
Apache + PHP-FPM
↓
Redis / MySQL
如果你愿意,可以告诉我:
我可以给你一套针对性配置模板。