温馨提示×

为什么apache2在ubuntu卡

小樊
41
2026-09-14 09:15:18
栏目: 智能运维

Apache2 在 Ubuntu 上“卡”(反应慢、请求卡住、负载高)通常不是单一原因,下面按最常见 → 较少见的顺序给你一份排查清单。


一、最常见原因

1. MPM 模式配置不合理(非常常见)

Ubuntu 默认 Apache 使用 mpm_event(或 prefork),但很多人没改配置就直接跑。

apachectl -V | grep -i mpm

常见问题:

  • mpm_prefork + PHP(慢、占内存)
  • MaxRequestWorkers 太小 → 并发一高就排队
  • KeepAlive 开太久 → 连接被占着

✅ 建议:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

prefork 示例(内存够才用):

<IfModule mpm_prefork_module>
    StartServers 4
    MinSpareServers 4
    MaxSpareServers 8
    MaxRequestWorkers 150
    MaxConnectionsPerChild 3000
</IfModule>

2. PHP 或后端慢(不是 Apache 的锅)

Apache 本身很快,但:

  • PHP 代码慢
  • 数据库查询慢
  • 外部 API 超时

表现:

  • 浏览器转圈
  • top 里 apache2 CPU 不高但内存涨

✅ 排查:

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

3. 磁盘 IO 或日志写满

df -h
iostat -x 1

常见问题:

  • /var/log/apache2 太大
  • 磁盘 100%
  • 云服务器 IO 被限流

二、网络和系统层原因

4. IPv6 / DNS 反向解析卡住

Apache 默认做:

  • hostname 反查
  • IPv6 监听

✅ 建议:

HostnameLookups Off

并确认:

Listen 80
# 不要只 Listen [::]:80 而没 IPv6

5. 防火墙 / SELinux / AppArmor

Ubuntu 默认用 ufw + AppArmor

sudo ufw status
sudo aa-status

有时:

  • 端口没开
  • AppArmor 限制了文件访问 → 请求卡死

三、更少但致命的原因

6. 内存不足 → 开始 swap

free -h
swapon --show

一旦 Apache 进 swap:

  • 卡到怀疑人生

7. 模块过多 / 无用模块

apache2ctl -M

常见拖慢模块:

  • mod_php(建议换 php-fpm)
  • 不需要的 rewrite / ssl 重复加载

✅ 推荐架构:

Apache + php-fpm

四、快速自查命令(复制可用)

# 看当前连接
ss -tnp | grep apache2

# 看进程状态
ps aux | grep apache2

# 看负载
top

# 看错误
sudo tail -n 50 /var/log/apache2/error.log

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

你可以补充:

  1. Ubuntu 版本
  2. Apache 版本
  3. 是否用 PHP / MySQL
  4. 是「打开网页慢」还是「完全卡死」
  5. 云服务器还是本地

我可以直接帮你给一套最优 apache2 配置。

0 踩