温馨提示×

ubuntu apache2为何卡顿

小樊
56
2026-07-17 19:38:23
栏目: 智能运维

Ubuntu + Apache2 卡顿的原因通常比较多,需要结合服务器配置、访问量、日志、资源占用、程序本身来判断。下面按「常见原因 → 排查方法 → 解决办法」给你一个系统性的分析。


一、最常见原因汇总

1️⃣ 服务器资源不足(最常见)

Apache2 本身并不慢,慢通常是 CPU / 内存 / IO 被打满

排查:

top
htop
free -h
df -h

常见现象:

  • 内存快用完(swap 开始大量使用)
  • CPU 长期 > 80%
  • 磁盘 IO 占用 100%

解决办法:

  • 升级服务器配置
  • 限制 Apache 并发数
  • 关闭不必要的服务

2️⃣ Apache MPM 配置不合理

Apache 有三种 MPM:

  • prefork(默认,老、耗内存)
  • worker
  • event(推荐)

查看当前 MPM:

apache2ctl -M | grep mpm

问题:

  • 使用 prefork + PHP
  • MaxRequestWorkers 设太大,直接把内存吃光

解决办法(推荐): ✅ 使用 mpm_event + PHP-FPM

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo apt install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.x-fpm

然后限制并发:

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

3️⃣ PHP 程序本身慢(非常常见)

即使 Apache 没问题,PHP 慢也会导致 Apache 卡死

常见原因:

  • 数据库查询慢
  • 没有缓存
  • 死循环
  • 调用外部接口超时

排查:

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

解决:

  • 开启 PHP OPcache
sudo apt install php-opcache
  • 数据库加索引
  • 使用 Redis / Memcached
  • 关闭调试模式

4️⃣ Apache 被攻击或并发过高

典型表现:

  • 网站突然变慢
  • 有大量不同 IP 访问
  • access.log 飞速增长

排查:

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

解决办法:

  • 限流(mod_reqtimeout、mod_evasive)
sudo apt install libapache2-mod-evasive
  • 使用防火墙
sudo ufw enable
  • 云服务器可使用:
    • Cloudflare
    • 宝塔 Nginx 防火墙
    • 安全组限制

5️⃣ 日志文件过大导致卡顿

Apache 日志可能几年没清理。

排查:

du -sh /var/log/apache2/*

解决:

sudo truncate -s 0 /var/log/apache2/access.log
sudo truncate -s 0 /var/log/apache2/error.log

或配置日志轮转:

sudo apt install logrotate

6️⃣ DNS 反向解析导致卡顿

Apache 默认会做 DNS 反向解析。

解决:

HostnameLookups Off

7️⃣ KeepAlive 设置不合理

问题:

  • 连接一直占用资源

推荐配置:

KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

8️⃣ 磁盘 IO 瓶颈

排查:

iotop

常见原因:

  • 大量写日志
  • 数据库在机械盘
  • 临时文件过多

解决:

  • 日志移到 tmpfs
  • 数据库迁移到 SSD
  • 清理 /tmp

二、快速自检清单(5 分钟定位)

✅ 内存是否爆满?
✅ 是否使用 prefork?
✅ PHP 是否直接跑在 Apache?
✅ access.log 是否异常大?
✅ 是否有大量并发连接?


三、最快优化方案(推荐)

如果你现在就想“先让网站快起来”:

1️⃣ 换成 mpm_event + php-fpm
2️⃣ 限制 MaxRequestWorkers
3️⃣ 开启 OPcache
4️⃣ 清理日志
5️⃣ 上 CDN(Cloudflare)


四、如果你愿意,我可以进一步帮你

你可以直接发我:

  • 服务器配置(CPU / 内存)
  • Apache MPM 类型
  • 是否使用 PHP
  • top / htop 截图
  • 访问量(日 PV)

我可以 直接给你一套最优配置,不用你自己试。

0