如何在CentOS上优化Apache2性能
导读:CentOS 上优化 Apache2 性能 一 基线评估与准备 明确业务类型与瓶颈:是静态资源为主还是动态/反向代理为主,瓶颈在CPU、内存、I/O 还是网络。 建立监控基线:关注并发连接数、每秒请求数、响应时间、CPU/内存、磁盘 I/...
CentOS 上优化 Apache2 性能
一 基线评估与准备
- 明确业务类型与瓶颈:是静态资源为主还是动态/反向代理为主,瓶颈在CPU、内存、I/O 还是网络。
- 建立监控基线:关注并发连接数、每秒请求数、响应时间、CPU/内存、磁盘 I/O、TIME_WAIT 数量,便于调参前后对比。
- 备份与灰度:先备份配置,使用单台灰度/维护窗口验证,再全量发布。
- 模块与端口梳理:仅启用必要模块,关闭无用模块与端口,减少攻击面与资源占用。
二 系统层面优化
- 文件描述符与进程数
- 提升系统级与用户级文件描述符上限,编辑**/etc/security/limits.conf**:
* soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 - 提升内核总句柄数(/etc/sysctl.conf):
fs.file-max = 6815744。 - 提升网络监听队列(/etc/sysctl.conf):
net.core.somaxconn = 65535。
- 提升系统级与用户级文件描述符上限,编辑**/etc/security/limits.conf**:
- TCP 网络栈
- 减少连接回收时间、开启复用与防护(/etc/sysctl.conf):
net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.ip_local_port_range = 10000 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 - 应用生效:
sudo sysctl -p /etc/sysctl.conf。
- 减少连接回收时间、开启复用与防护(/etc/sysctl.conf):
- 虚拟内存与 I/O
- 适度降低换页倾向、优化脏页刷写(/etc/sysctl.conf):
vm.swappiness = 10 vm.overcommit_memory = 1 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10
- 适度降低换页倾向、优化脏页刷写(/etc/sysctl.conf):
- 文件系统
- 使用ext4/XFS,挂载时加上noatime以减少元数据写入;日志与数据分离到不同磁盘更佳。
三 Apache MPM 与核心参数
- 选择并调整合适的 MPM(多处理模块)
- 以并发与资源占用为核心选择:静态资源为主可选event,混合负载可选worker/event,传统或兼容性要求高用prefork。
- 在**/etc/httpd/conf.modules.d/00-mpm.conf**启用相应模块,并按硬件与负载调参。
- 推荐的 MPM 参数示例(需结合实际压测微调)
- prefork(示例)
< IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0 < /IfModule> - worker/event(示例)
< IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 1000 < /IfModule>
- prefork(示例)
- 连接与会话
- 启用持久连接并控制握手开销:
KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
- 启用持久连接并控制握手开销:
- 压缩与缓存
- 启用 Gzip 压缩(减少传输体积):
< IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript < /IfModule> - 设置静态资源过期(减少重复请求):
< 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 image/gif "access plus 1 year" ExpiresByType application/javascript "access plus 30 days" < /IfModule>
- 启用 Gzip 压缩(减少传输体积):
- 协议与加速
- 启用HTTP/2(需 TLS):
sudo a2enmod http2并在虚拟主机启用Protocols h2 http/1.1。 - 启用SSL/TLS:
sudo a2enmod ssl并配置有效证书。
- 启用HTTP/2(需 TLS):
四 模块与内容分发优化
- 模块管理
- 禁用不需要的模块(如 autoindex、status 等),仅启用必要模块(如deflate、expires、cache/disk_cache、http2、ssl、proxy等),降低内存与 CPU 开销。
- 反向代理与缓存
- 对动态内容使用mod_proxy + mod_cache/mod_disk_cache做反向代理与本地缓存,减轻后端压力。
- 日志优化
- 合理设置日志级别与轮转策略,避免频繁 I/O 影响性能;必要时减少不必要的日志字段。
- 内容分发网络(CDN)
- 将静态资源交由CDN分发,降低源站压力与用户访问时延。
五 验证与持续监控
- 配置生效与语法检查
- 语法检查:
sudo httpd -t - 重启服务:
sudo systemctl restart httpd
- 语法检查:
- 压测与对比
- 使用ab、wrk、jmeter等进行压测,对比并发能力、P95/P99 延迟、错误率与资源占用,逐步微调参数。
- 运行期监控
- 进程与连接:
ps aux | grep httpd、netstat -an | grep :80 | wc -l - 系统资源:
top/vmstat/iostat/sar,关注CPU、内存、I/O、网络与TIME_WAIT变化。
- 进程与连接:
- 风险提示
- 修改内核参数、MPM 与并发上限可能引发不稳定;务必在测试环境验证并保留回滚方案,生产变更选择低峰时段进行。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在CentOS上优化Apache2性能
本文地址: https://pptw.com/jishu/754630.html
