优化Apache连接数的核心目标是在服务器资源(内存、CPU)允许范围内,提高并发处理能力,同时避免因配置不当导致资源耗尽。以下是具体优化步骤:
Apache的并发处理能力主要由MPM模块决定,不同模式(prefork、worker、event)的参数配置差异较大,需根据服务器场景选择。
确认当前MPM模式:
apachectl -V | grep MPM
修改MPM配置:
根据模式编辑对应配置段(如/etc/httpd/conf/httpd.conf或/etc/apache2/mods-enabled/mpm_*.conf):
<IfModule mpm_prefork_module>
StartServers 10 # 启动时的子进程数
MinSpareServers 5 # 最小空闲子进程数
MaxSpareServers 20 # 最大空闲子进程数
MaxClients 150 # 最大并发连接数(关键参数)
MaxRequestsPerChild 1000 # 每个子进程处理的最大请求数(防内存泄漏)
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25 # 每个子进程的线程数
MaxRequestWorkers 150 # 最大并发连接数(=ThreadsPerChild×ServerLimit)
MaxConnectionsPerChild 1000
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150 # 最大并发连接数
MaxConnectionsPerChild 10000 # 更高的请求上限(减少进程重启开销)
AsyncWorkers 10 # 异步工作线程数(可选,提升IO密集型性能)
</IfModule>
MaxClients = (服务器总内存 - 系统预留内存) / 单个Apache进程内存占用
例如,8GB内存服务器,每个Apache进程占用约50MB,则MaxClients ≈ (8192-512)/50 ≈ 150(需预留内存给系统和其他服务)。MaxRequestWorkers调整(如ThreadsPerChild=25,MaxRequestWorkers=150则ServerLimit=6)。KeepAlive允许客户端通过同一个TCP连接发送多个请求,减少连接建立/关闭的开销(HTTP/1.1默认开启)。
KeepAlive On # 开启KeepAlive
MaxKeepAliveRequests 100 # 单个连接最大请求数(避免长期占用连接)
KeepAliveTimeout 5 # 连接保持超时时间(秒,建议5-10)
注意:若并发量极大,可适当降低KeepAliveTimeout(如3秒),释放闲置连接。
Apache的连接数受系统文件描述符限制和内核网络参数影响,需同步调整。
编辑/etc/security/limits.conf,增加以下内容:
* soft nofile 65535 # 单个用户软限制
* hard nofile 65535 # 单个用户硬限制
编辑/etc/pam.d/login,添加:
session required pam_limits.so
验证:
ulimit -n # 查看当前用户的文件描述符限制
编辑/etc/sysctl.conf,添加以下内容:
net.core.somaxconn = 65535 # 监听队列最大长度(避免连接被拒绝)
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度(应对SYN Flood)
net.ipv4.ip_local_port_range = 1024 65535 # 客户端可用端口范围
net.ipv4.tcp_tw_reuse = 1 # 复用TIME_WAIT状态的连接(减少端口耗尽)
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT状态超时时间(秒,默认60)
应用配置:
sysctl -p
通过缓存静态内容(如图片、CSS、JS),减少对后端服务器的请求,间接提升并发处理能力。
# 启用mod_cache和mod_expires
LoadModule cache_module modules/mod_cache.so
LoadModule expires_module modules/mod_expires.so
<IfModule mod_cache.c>
CacheQuickHandler off
CacheLock on
CacheLockPath /tmp/mod_cache-lock
CacheLockMaxAge 5
CacheIgnoreHeaders Set-Cookie
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
优化后需通过工具监控服务器状态,根据实际情况调整参数:
top(查看CPU/内存占用)、htop(更直观的资源监控)、netstat -antp(查看连接数)。ab(Apache Benchmark)模拟高并发:ab -n 10000 -c 1000 http://your-server.com/ # 10000次请求,1000并发
access.log分析请求模式(如热点资源、慢请求),针对性优化。mod_limitipconn模块,防止恶意IP占用过多连接:LoadModule limitipconn_module modules/mod_limitipconn.so
<IfModule mod_limitipconn.c>
<Location />
MaxConnectionsPerIP 50 # 每个IP最大连接数
</Location>
</IfModule>
通过以上步骤,可显著提升Apache的并发连接数处理能力。需注意:所有参数调整都需结合服务器实际资源情况,避免过度配置导致系统崩溃。优化后务必进行压力测试,验证效果。