温馨提示×

apache为何在centos卡顿

小樊
42
2026-10-11 20:09:12
栏目: 智能运维

Apache 在 CentOS 上出现“卡顿”(响应慢、连接堆积、CPU/内存占用高、偶发卡死)通常不是单一原因,下面按最常见 → 较少见的顺序给你一个系统性的排查思路。


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

1. Apache MPM 模式不匹配

CentOS 默认可能使用:

  • prefork(老、稳定,但耗内存)
  • worker / event(高并发更好)

现象

  • 内存占用高
  • 并发一上来就卡
  • scoreboard 全是 Waiting / Busy

排查

httpd -V | grep -i mpm

建议

  • 静态内容多 → event
  • PHP 老版本 → prefork
  • 高并发 → worker / event

2. PHP 阻塞(非常常见)

如果你用:

  • mod_php
  • 或 PHP 调用外部慢服务(DB、Redis、API)

现象

  • 单个请求慢,整体卡
  • Apache 进程数暴涨

排查

top
ps -ef | grep httpd

解决

  • 使用 php-fpm
  • 设置合理 pm.max_children
  • 检查慢 SQL、外部接口

3. 文件描述符 / 连接数限制

CentOS 默认限制较低。

现象

  • 并发稍高就拒绝连接
  • 日志出现:
Too many open files

检查

ulimit -n
cat /proc/sys/fs/file-max

解决

/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

4. SELinux 干扰(CentOS 特有)

现象

  • 偶发卡顿
  • 日志读取失败
  • 权限没问题但访问异常

排查

getenforce
tail /var/log/audit/audit.log

临时验证

setenforce 0

二、系统层问题

5. 磁盘 I/O 瓶颈

现象

  • load 高但 CPU 不高
  • Apache 日志写入慢

排查

iostat -x 1

常见原因

  • 机械盘
  • 日志没轮转
  • swap 频繁

6. 内存不足 + Swap

现象

  • 卡顿是“一卡一卡”的
  • si/so 不为 0
free -m
vmstat 1

解决

  • 加内存
  • 减少 Apache 进程数
  • 关闭 swap(谨慎)

7. 网络问题

  • 防火墙(firewalld)规则复杂
  • 网卡半双工
  • DNS 反向解析慢(Apache 默认开 HostnameLookups)

关闭

HostnameLookups Off

三、Apache 配置问题

8. KeepAlive 设置不合理

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5   # 别设太大

9. 日志没轮转

ls -lh /var/log/httpd/

建议

  • 使用 logrotate
  • 不记录不必要日志

四、快速定位建议(实用命令)

# 当前连接状态
ss -ant | awk '{print $1}' | sort | uniq -c

# Apache 状态
httpd status

# 慢请求
tail -f /var/log/httpd/access_log

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

你可以补充:

  1. CentOS 版本(7 / 8 / Stream)
  2. Apache 版本
  3. 是否用 PHP / 什么应用
  4. 卡顿是偶发还是高并发必现
  5. top / free / ss 的输出

我可以直接帮你定位到具体配置或命令。

0 踩