温馨提示×

为什么linux apache占用高

小樊
38
2026-10-29 04:12:18
栏目: 智能运维

Linux 下 Apache 占用高(CPU / 内存 / 连接数高) 是比较常见的问题,通常不是 Apache 本身“坏了”,而是配置、业务、或系统环境导致的。下面按常见原因 → 排查方法 → 解决建议来说明。


一、最常见原因分类

1️⃣ Apache 工作模式(MPM)配置不合理

Apache 有多种工作模式:

  • prefork(进程型,内存占用高)
  • worker(线程+进程)
  • event(高并发推荐)

问题表现

  • 内存占用高
  • 进程数很多(httpd / apache2 一大堆)

排查

httpd -V | grep -i mpm
# 或
apache2 -V | grep -i mpm

建议

  • 高并发:用 event 或 worker
  • 调小 MaxClients / MaxRequestWorkers

2️⃣ 访问量过大或存在恶意请求

  • 正常流量暴涨
  • 爬虫、扫描、CC 攻击

排查

netstat -an | grep :80 | wc -l
ss -ant | grep :80 | wc -l

tail -f /var/log/httpd/access_log
# 或
tail -f /var/log/apache2/access.log

看什么

  • 同一 IP 大量请求
  • 某个 URL 被狂刷

3️⃣ PHP / 后端程序性能差

Apache 只是“ frontend ”,真正吃资源的是:

  • PHP
  • MySQL 慢查询
  • 外部 API 超时

典型现象

  • Apache 进程卡在 Sending Reply
  • 单个请求耗时几十秒

排查

top -c
# 看 httpd 进程对应的 php 脚本

PHP 示例:

sleep(10); // 或慢 SQL

4️⃣ KeepAlive 设置不合理

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

问题

  • 连接不释放
  • 进程被占满

建议

  • 高并发:
KeepAlive Off

或

KeepAliveTimeout 2~5

5️⃣ 日志写入过大

  • access_log / error_log 疯狂写
  • 磁盘 IO 高

排查

du -sh /var/log/httpd
iostat -x 1

6️⃣ 模块加载过多

如:

  • mod_php
  • mod_security
  • 各种不必要模块

建议

  • 不用 PHP:不要用 mod_php
  • 用 PHP-FPM 替代

7️⃣ 系统资源本身小

  • 1C1G 跑 Apache + MySQL + PHP
  • 很容易 100%

二、快速自查清单(实用)

# 1. 看 Apache 进程数
ps aux | grep apache | wc -l

# 2. 看 CPU / 内存
top

# 3. 看连接数
ss -ant | grep :80 | wc -l

# 4. 看慢请求
tail -n 100 /var/log/apache2/access.log

三、通用优化建议(实战)

✅ 使用 Apache + PHP-FPM
✅ 使用 event MPM
✅ 限制并发
✅ 开启 mod_status 观察
✅ 前端加 Nginx 或 CDN
✅ 数据库慢查询优化


四、如果你愿意,我可以更具体地帮你

你可以补充:

  1. 系统版本(CentOS / Ubuntu?)
  2. Apache 版本
  3. 是否用 PHP
  4. top 截图或进程数
  5. 是 CPU 高 还是 内存高

我可以直接帮你 看配置、给优化方案。

0 踩