在 CentOS 上优化 Apache(通常是 httpd)性能,可以从系统层面、Apache 配置、模块优化、缓存与压缩、以及架构层面几个方向入手。下面给出一套比较实用、可落地的优化方案。
# 提高文件描述符限制
fs.file-max = 1000000
# TCP 连接优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
执行:
sysctl -p
# /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
CentOS 默认通常是 prefork 或 worker
worker 或 eventprefork查看当前 MPM:
httpd -V | grep -i mpm
切换到 event(CentOS 7+ 推荐):
yum install mod_http2
# 修改 /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
编辑:
vi /etc/httpd/conf.modules.d/00-mpm.conf
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 10000
</IfModule>
MaxRequestWorkers不要超过内存承受范围
# 查看已加载模块
httpd -M
常见可关闭:
mod_status(生产可关)mod_userdirmod_autoindexLoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
LoadModule expires_module modules/mod_expires.so
<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>
yum install php-fpm
Apache 配置:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
PHP-FPM 调优:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
CustomLog logs/access_log combined env=!dontlog
SetEnvIf Request_URI "\.(jpg|png|css|js)$" dontlog
LogPipe |/usr/bin/rotatelogs logs/access_log 86400
ab -n 10000 -c 500 http://localhost/
htop
ss -ant | wc -l
✅ 使用 event MPM
✅ 开 gzip
✅ 开 expires
✅ 用 PHP-FPM
✅ 关无用模块
✅ 调内核参数
如果你愿意,可以告诉我:
我可以给你针对性的配置模板。