在 CentOS 上调优 Apache HTTP Server(httpd / apache2),可以从系统层面、Apache 配置层面、模块与架构、监控与压测几个维度来做。下面以 CentOS 7/8 + Apache 2.4 为例系统说明。
Apache 高并发时容易遇到 Too many open files
# 查看
ulimit -n
# 修改(永久)
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
编辑 /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
getenforce
setenforce 0
# 永久关闭需改 /etc/selinux/config
Apache 2.4 常见 MPM:
httpd -V | grep -i mpm
yum install httpd mod_http2
vim /etc/httpd/conf.modules.d/00-mpm.conf
确保启用:
LoadModule mpm_event_module modules/mod_mpm_event.so
/etc/httpd/conf/httpd.conf 或 conf.d/
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 64
MaxSpareThreads 128
ThreadsPerChild 64
MaxRequestWorkers 1024
MaxConnectionsPerChild 10000
</IfModule>
说明
MaxRequestWorkers:最大并发连接MaxConnectionsPerChild:防止内存泄漏KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
高并发场景:KeepAlive 时间不宜过长
Timeout 30
LimitRequestBody 10485760
httpd -M
注释不需要的模块(如 mod_userdir、mod_status 非必要时)
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
CacheQuickHandler off
CacheRoot /var/cache/httpd
CacheEnable disk /
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyPass /api/ http://127.0.0.1:8080/
ProxyPassReverse /api/ http://127.0.0.1:8080/
LogLevel warn
CustomLog logs/access_log combined
# 或按条件记录
<Location /server-status>
SetHandler server-status
Require ip 127.0.0.1
</Location>
yum install httpd-tools
ab -n 10000 -c 500 http://localhost/
❌ 直接改 apache2.conf(CentOS 是 httpd.conf)
❌ prefork + 高并发
❌ KeepAliveTimeout 过大
❌ 文件描述符不够
如果你愿意,可以告诉我:
我可以给你一套精准调优配置。