在 Ubuntu 上优化 Apache2 性能,通常从工作模式、模块、缓存、系统参数、静态资源几个方面入手。下面按“实用优先”的顺序说明。
Apache 在 Ubuntu 默认通常是 prefork 或 event(Apache 2.4 推荐 event)。
查看当前 MPM:
apache2ctl -V | grep -i mpm
event(性能最好)preforkevent + proxy_fcgi切换 MPM(以 event 为例):
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
配置文件位置:
/etc/apache2/mods-enabled/mpm_event.conf
示例(2–4 GB 内存服务器):
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
要点:
MaxRequestWorkers 控制并发上限MaxConnectionsPerChild 防止内存泄漏查看已启用模块:
apache2ctl -M
常见可关闭的:
sudo a2dismod status
sudo a2dismod autoindex
sudo a2dismod cgi
(生产环境一般不需要)
sudo a2enmod deflate
示例配置:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
sudo a2enmod expires
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
</IfModule>
比 mod_php 快且稳:
sudo apt install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php-fpm
sudo systemctl restart apache2
ulimit -n
如太小,修改:
/etc/security/limits.conf
sudo sysctl -w net.core.somaxconn=1024
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
高并发场景:
top
htop
apache2ctl status
journalctl -u apache2
event MPMdeflate + expiresMaxRequestWorkers如果你愿意,可以告诉我:
我可以直接给你一套可用配置。