温馨提示×

ubuntu apache为什么慢

小樊
45
2026-10-08 03:05:28
栏目: 智能运维

在 Ubuntu 上,Apache 变慢通常不是单一原因,而是多个因素叠加。下面按最常见 → 较少见的顺序帮你梳理,并给出对应的排查/解决思路。


一、最常见原因(90% 的情况)

1️⃣ MPM 模式配置不合理

Apache 在 Ubuntu 默认使用 MPM event / prefork,配置不对会非常慢。

查看当前 MPM:

apache2ctl -V | grep -i mpm

常见错误

  • 使用 prefork 但 MaxClients 太小
  • 使用 event 但 ThreadsPerChild 太低

推荐配置(示例)

<IfModule mpm_event_module>
    StartServers             2
    MinSpareThreads         25
    MaxSpareThreads         75
    ThreadLimit             64
    ThreadsPerChild         25
    MaxRequestWorkers      150
    MaxConnectionsPerChild   0
</IfModule>

修改后:

sudo systemctl restart apache2

2️⃣ PHP 执行方式太慢(非常常见)

如果你跑的是 PHP 网站:

❌ 错误方式:

  • mod_php + prefork(内存大、慢)

✅ 推荐方式:

  • php-fpm + mpm_event

安装:

sudo apt install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.1-fpm
sudo a2dismod php8.1
sudo systemctl restart apache2

3️⃣ 未启用 KeepAlive 或配置错误

KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

❌ 关闭 KeepAlive 会显著变慢(尤其是前端资源多)


4️⃣ DNS 反向解析卡住

Apache 默认会尝试解析客户端 IP。

关闭:

HostnameLookups Off

二、系统 & 资源问题

5️⃣ 内存不足 / 大量 Swap

free -h
top

如果 Swap 频繁使用,Apache 会“假死”。

解决:

  • 增加内存
  • 降低 MaxRequestWorkers

6️⃣ 磁盘 IO 瓶颈

iostat -x 1

如果是 HDD + 大量日志 / 上传,会非常慢。


7️⃣ 日志写入过多

tail -f /var/log/apache2/access.log

关闭不必要日志:

CustomLog /dev/null common

三、网络 & 安全因素

8️⃣ 防火墙 / 安全模块拖慢

  • mod_security
  • fail2ban

临时关闭测试:

sudo a2dismod security2
sudo systemctl restart apache2

9️⃣ 被慢速攻击(Slowloris)

sudo apt install libapache2-mod-evasive

或限制:

RequestReadTimeout header=10-20,minrate=500

四、快速自检清单(建议你照做)

# 1. 看 Apache 状态
systemctl status apache2

# 2. 看连接数
netstat -ant | grep :80 | wc -l

# 3. 看错误日志
tail -n 50 /var/log/apache2/error.log

# 4. 看负载
uptime

五、如果你愿意,我可以更精准帮你

你可以直接贴出:

  1. Ubuntu 版本
  2. Apache 版本
  3. 是否用 PHP / 什么程序(WordPress?自建?)
  4. apache2ctl -M 输出
  5. 慢的具体表现(打开首页慢?API慢?)

我可以直接告诉你改哪一行配置最有效。

0 踩