温馨提示×

apache2在centos如何调优

小樊
34
2026-09-11 21:28:16
栏目: 智能运维

在 CentOS 上调优 Apache HTTP Server(httpd / apache2),可以从系统层面、Apache 配置层面、模块与架构、监控与压测几个维度来做。下面以 CentOS 7/8 + Apache 2.4 为例系统说明。


一、系统层面调优(基础但关键)

1. 文件描述符限制

Apache 高并发时容易遇到 Too many open files

# 查看
ulimit -n

# 修改(永久)
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

2. 内核参数优化

编辑 /etc/sysctl.conf

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 65535
sysctl -p

3. 关闭 SELinux(如不影响安全)

getenforce
setenforce 0
# 永久关闭需改 /etc/selinux/config

二、Apache 运行模式(MPM)选择

Apache 2.4 常见 MPM:

  • prefork:稳定,但内存占用高(不适合高并发)
  • worker:线程模型,中等并发
  • event(推荐):高并发最佳

查看当前 MPM

httpd -V | grep -i mpm

切换为 event MPM(CentOS)

yum install httpd mod_http2
vim /etc/httpd/conf.modules.d/00-mpm.conf

确保启用:

LoadModule mpm_event_module modules/mod_mpm_event.so

三、Apache 核心配置调优

1. MPM event 调优示例

/etc/httpd/conf/httpd.confconf.d/

<IfModule mpm_event_module>
    StartServers             4
    MinSpareThreads         64
    MaxSpareThreads        128
    ThreadsPerChild         64
    MaxRequestWorkers      1024
    MaxConnectionsPerChild  10000
</IfModule>

说明

  • MaxRequestWorkers:最大并发连接
  • MaxConnectionsPerChild:防止内存泄漏

2. KeepAlive 调优

KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

高并发场景:KeepAlive 时间不宜过长


3. 超时与请求限制

Timeout 30
LimitRequestBody 10485760

四、模块与功能优化

1. 关闭无用模块

httpd -M

注释不需要的模块(如 mod_userdirmod_status 非必要时)


2. 启用压缩(节省带宽)

LoadModule deflate_module modules/mod_deflate.so

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>

3. 启用缓存

LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so

CacheQuickHandler off
CacheRoot /var/cache/httpd
CacheEnable disk /

五、静态资源与反向代理优化

1. 静态文件

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

2. 作为反向代理(Tomcat / Node)

ProxyRequests Off
ProxyPass /api/ http://127.0.0.1:8080/
ProxyPassReverse /api/ http://127.0.0.1:8080/

六、日志优化(容易被忽视)

1. 降低日志级别

LogLevel warn

2. 关闭多余日志

CustomLog logs/access_log combined
# 或按条件记录

七、监控与压测

1. 启用 status 页

<Location /server-status>
    SetHandler server-status
    Require ip 127.0.0.1
</Location>

2. 压测工具

yum install httpd-tools
ab -n 10000 -c 500 http://localhost/

八、典型推荐配置(中等服务器)

  • CPU:4 核
  • 内存:8G
  • event MPM
  • MaxRequestWorkers ≈ 800–1000
  • KeepAliveTimeout 5s

九、常见坑

❌ 直接改 apache2.conf(CentOS 是 httpd.conf
❌ prefork + 高并发
❌ KeepAliveTimeout 过大
❌ 文件描述符不够


如果你愿意,可以告诉我:

  • CentOS 版本
  • Apache 版本
  • 并发量 / 业务类型(API / 静态 / 代理)

我可以给你一套精准调优配置

0