Ubuntu 上 Apache 响应慢,通常不是单一原因,而是系统、Apache 配置、应用、网络几类问题叠加。下面按最常见 → 较少见帮你梳理,并给出排查方法。
Ubuntu 默认常用 mpm_prefork,但不一定适合你的场景。
查看当前 MPM:
apachectl -V | grep -i mpm
常见问题:
✅ 建议:
mpm_event + php-fpmmpm_event切换示例(PHP):
sudo a2dismod php8.1 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif
sudo a2enconf php8.1-fpm
sudo systemctl restart apache2
Apache 默认配置偏保守。
检查:
sudo apache2ctl -S
优化(/etc/apache2/mods-enabled/mpm_event.conf):
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 200
MaxConnectionsPerChild 0
</IfModule>
改完:
sudo systemctl restart apache2
Apache 默认会做 DNS 反向解析,非常慢。
修改:
HostnameLookups Off
位置:/etc/apache2/apache2.conf
Apache 只是“传话的”,真正慢的是:
排查:
top
htop
iotop
MySQL:
SHOW PROCESSLIST;
free -h
swapon --show
如果 swap 经常被用:
MaxRequestWorkersiostat -x 1
慢磁盘 + 大量日志 = 卡
Ubuntu 一般不是 SELinux,但:
sudo ufw status
tail -f /var/log/apache2/access.log
# 1. 看 MPM
apachectl -V | grep mpm
# 2. 看负载
top
# 3. 看 Apache 错误
tail -f /var/log/apache2/error.log
# 4. 看访问日志
tail -f /var/log/apache2/access.log
# 5. 看配置
grep -R "HostnameLookups" /etc/apache2
你可以直接告诉我:
我可以给你一套直接可抄的优化配置。