1. 调整MPM(多处理模块)配置
MPM是Apache处理并发请求的核心模块,CentOS默认使用prefork(进程模式,线程安全但内存占用高),高并发场景建议切换至event(事件驱动,结合多线程与进程优势,性能更优)。
/etc/httpd/conf.modules.d/00-mpm.conf,注释prefork相关行(如LoadModule mpm_prefork_module modules/mod_mpm_prefork.so)。event模块加载行(LoadModule mpm_event_module modules/mod_mpm_event.so),并配置参数:<IfModule mpm_event_module>
StartServers 2 # 启动时的子进程数
MinSpareThreads 25 # 最小空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadLimit 64 # 每个子进程的最大线程数
ThreadsPerChild 25 # 每个子进程创建的固定线程数
MaxRequestWorkers 150 # 最大并发请求数(根据内存调整,如每线程占用10MB,1.5GB内存约设150)
MaxConnectionsPerChild 0 # 每个子进程处理的请求数(0表示无限制,避免内存泄漏可设为1000)
</IfModule>
注:
event模式解决了worker模式中keep-alive长连接占用线程的问题,更适合静态内容和高并发场景。
2. 优化KeepAlive设置
KeepAlive允许客户端通过单个TCP连接发送多个请求,减少连接建立/关闭的开销(TCP三次握手、四次挥手的CPU消耗),但需平衡连接占用时间。
httpd.conf中设置KeepAlive On。MaxKeepAliveRequests 100:单个连接允许的最大请求数(避免单个连接占用过久,影响其他请求)。KeepAliveTimeout 5:等待下一个请求的超时时间(秒),超过则关闭连接(建议设为5-10秒,避免长时间空闲占用资源)。3. 启用压缩技术(mod_deflate)
通过Gzip压缩传输的文本数据(HTML、CSS、JS、JSON等),减少数据量(通常压缩率为50%-70%),降低CPU处理传输数据的负担(CPU占用减少,响应速度提升)。
mod_deflate已加载(默认启用,可通过httpd -M | grep deflate验证)。httpd.conf或虚拟主机配置中添加:<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
注:避免压缩图片、视频等二进制文件(已压缩,再次压缩会增加CPU开销)。
4. 配置静态文件缓存(mod_expires/mod_cache)
静态文件(图片、CSS、JS、字体等)无需每次请求都由Apache处理,通过缓存减少服务器负载。
LoadModule expires_module modules/mod_expires.so(默认启用)。httpd.conf中添加:<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year" # JPEG图片缓存1年
ExpiresByType image/png "access plus 1 year" # PNG图片缓存1年
ExpiresByType text/css "access plus 30 days" # CSS文件缓存30天
ExpiresByType application/javascript "access plus 30 days" # JS文件缓存30天
</IfModule>
注:缓存时间根据文件更新频率调整(如CSS/JS每月更新,可设为30天;图片长期不变,可设为1年)。
5. 禁用不必要的模块
Apache默认加载许多模块(如mod_cgi、mod_autoindex、mod_ldap等),未使用的模块会占用内存和CPU资源(尤其是动态模块,加载后即常驻内存)。
httpd -M(列出所有加载的模块)。/etc/httpd/conf.modules.d/目录下对应模块的加载行(如禁用mod_cgi,注释LoadModule cgi_module modules/mod_cgi.so)。systemctl restart httpd使更改生效。6. 调整系统内核参数
优化操作系统的网络和文件系统参数,减少CPU在TCP连接、文件IO等方面的开销。
/etc/sysctl.conf,添加以下参数:net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT状态的超时时间(秒),默认60,缩短可快速释放端口
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT状态的端口(减少端口耗尽)
net.ipv4.tcp_max_syn_backlog = 8192 # SYN队列长度(高并发时避免SYN Flood攻击导致连接失败)
net.core.somaxconn = 4096 # 监听队列的最大长度(避免连接被拒绝)
net.ipv4.tcp_keepalive_time = 1200 # TCP keepalive探测间隔(秒),减少无效连接占用资源
sysctl -p。7. 监控与持续调优
通过监控工具实时了解CPU使用情况,针对性调整配置:
top(按1查看每个CPU核心的使用率)、htop(更直观的资源占用展示)、vmstat 1(查看CPU、内存、IO的实时状态)命令。/var/log/httpd/access_log(访问日志,查看高频请求)和/var/log/httpd/error_log(错误日志,查看异常请求),识别性能瓶颈(如某个URL占用大量CPU,可针对性优化或缓存)。ab(Apache Benchmark)或wrk工具模拟高并发请求,评估优化效果(如ab -n 10000 -c 1000 http://example.com/,表示10000次请求,并发1000)。