CentOS 上 Apache 访问慢,通常不是单一原因,而是系统、网络、Apache 配置、应用代码等多个环节叠加。下面按最常见 → 较少见的顺序给你一个系统性排查思路,并给出对应解决方案。
Apache 默认会对客户端 IP 做 反向 DNS 解析,如果 DNS 不通或慢,会导致首包延迟。
✅ 解决:
HostnameLookups Off
在 httpd.conf 或虚拟主机中修改并重启:
systemctl restart httpd
CentOS 默认可能是 prefork,不适合高并发。
查看当前 MPM:
httpd -V | grep MPM
✅ 推荐配置(如果是 CPU 较强、内存一般):
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
若使用 PHP,建议:
如果是 PHP 网站,Apache 本身可能没问题,而是 PHP 慢。
排查方法:
top
htop
看是否 php / php-fpm 占 CPU 高。
✅ 优化手段:
file_get_contents() 外部请求长连接数量过多会拖慢新请求。
✅ 推荐配置:
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
free -h
如果 Swap 被大量使用,性能会严重下降。
✅ 解决:
MaxRequestWorkersswapoff -a
常见于日志、数据库、session 文件。
查看 IO:
iostat -x 1
✅ 优化:
/dev/shmgetenforce
✅ 临时验证:
setenforce 0
如果明显变快,则需调整 SELinux 策略。
如:
✅ 排查:
mod_securityfail2baniptables / firewalld✅ 临时关闭测试:
systemctl stop firewalld
LogFormat "%h %l %u %t \"%r\" %>s %b %D" combined_time
%D 是微秒级响应时间。
ss -antp | grep httpd
你可以按顺序回答这 5 个问题,我可以更精确判断:
| 现象 | 最可能原因 |
|---|---|
| 首访问慢 | DNS 反向解析 |
| 并发一高就慢 | MPM 配置 |
| 动态页面慢 | PHP / DB |
| 随机慢 | IO / swap |
| 有时快有时慢 | KeepAlive / 外部请求 |
如果你愿意,可以贴出:
httpd.conf 关键配置top / free -h 输出我可以直接帮你给出最优优化方案。