1. 调整MPM(多处理模块)设置
MPM是Apache处理并发请求的核心模块,CentOS默认使用prefork(多进程模型,适合兼容性场景但内存占用高),高并发环境下推荐切换至event或worker(多线程/混合模型,更节省内存)。需修改/etc/httpd/conf.modules.d/00-mpm.conf(或对应模块文件),例如event MPM的典型配置:
<IfModule mpm_event_module>
StartServers 2 # 启动时的进程数
MinSpareThreads 25 # 最小空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadLimit 64 # 单个进程的最大线程数
ThreadsPerChild 25 # 每个子进程创建的线程数
MaxRequestWorkers 256 # 最大并发请求数(根据内存调整)
MaxConnectionsPerChild 1000 # 每个子进程处理的最大请求数(防内存泄漏)
</IfModule>
修改后需重启Apache生效。
2. 优化KeepAlive设置
KeepAlive通过复用TCP连接减少建立/关闭的开销,但设置不当会增加内存占用。在httpd.conf中调整:
KeepAlive On # 启用KeepAlive
MaxKeepAliveRequests 100 # 单个连接最大请求数(避免单个连接占用过久)
KeepAliveTimeout 5 # 连接保持时间(秒,建议5-10秒)
过高的MaxKeepAliveRequests或KeepAliveTimeout会导致连接堆积,需根据并发量平衡。
3. 启用静态文件缓存
通过mod_expires模块为静态资源(CSS、JS、图片)设置缓存时间,减少重复请求。在配置文件中添加:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType application/javascript "access plus 30 days"
</IfModule>
这会告知浏览器缓存静态资源,降低服务器负载。
4. 使用压缩技术减小传输量
通过mod_deflate模块压缩文本类内容(HTML、CSS、JS),减少网络传输时间。在配置文件中添加:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
注意:避免压缩图片(如JPEG、PNG),因其本身已压缩,压缩反而会增加CPU开销。
5. 调整系统内核参数
修改/etc/sysctl.conf优化TCP连接和内存管理,提升并发处理能力:
# 增加TCP连接队列长度
net.core.somaxconn = 65535
# 允许重用TIME_WAIT状态的连接
net.ipv4.tcp_tw_reuse = 1
# 减少TIME_WAIT状态的超时时间(秒)
net.ipv4.tcp_fin_timeout = 30
# 增加本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 增加SYN队列长度
net.ipv4.tcp_max_syn_backlog = 65535
修改后执行sysctl -p使配置生效。
6. 限制模块加载
禁用不必要的模块(如mod_status、mod_info),减少内存占用。通过httpd -M命令查看已加载模块,编辑/etc/httpd/conf.modules.d/*.conf禁用不需要的模块(注释对应LoadModule行),例如:
# LoadModule status_module modules/mod_status.so
# LoadModule info_module modules/mod_info.so
仅保留必需模块(如mod_rewrite、mod_ssl)。
7. 优化日志记录
降低日志详细程度,减少磁盘I/O。修改httpd.conf中的LogLevel和CustomLog:
LogLevel warn # 设置日志级别为warn(仅记录警告和错误)
CustomLog logs/access_log combined env=!dontlog # 可选:排除特定请求(如静态资源)
对于高流量站点,可将日志写入单独的磁盘分区,避免影响主存储性能。
8. 使用缓存代理
通过mod_cache和mod_disk_cache模块缓存动态内容(如PHP页面),减少后端处理次数。在配置文件中添加:
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
<IfModule mod_cache.c>
CacheQuickHandler off
CacheLock on
CacheLockPath /tmp/mod_cache-lock
CacheLockMaxAge 5
CacheIgnoreHeaders Set-Cookie
</IfModule>
<IfModule mod_cache_disk.c>
CacheRoot /var/cache/apache2/mod_cache_disk
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
</IfModule>
需创建缓存目录并设置权限:mkdir -p /var/cache/apache2/mod_cache_disk && chown apache:apache /var/cache/apache2/mod_cache_disk。
9. 监控与持续调优
使用工具(如top、htop、vmstat、ab)监控Apache性能:
top:查看CPU、内存占用;ab(Apache Bench):测试并发性能(示例:ab -n 1000 -c 100 http://example.com/);vmstat 1:监控系统级资源使用(如上下文切换、内存交换)。