Ubuntu下Apache2性能如何提升
导读:Ubuntu下Apache2性能提升实操指南 一 基础与架构优化 选择并切换合适的MPM(多路复用模块):需要线程安全(如PHP-FPM)优先用event(高并发、低内存),兼容旧版非线程安全PHP用prefork,折中用worker。切...
Ubuntu下Apache2性能提升实操指南
一 基础与架构优化
- 选择并切换合适的MPM(多路复用模块):需要线程安全(如PHP-FPM)优先用event(高并发、低内存),兼容旧版非线程安全PHP用prefork,折中用worker。切换后需重启生效。
- 启用HTTP Keep-Alive减少握手开销:建议 KeepAlive On,MaxKeepAliveRequests 100,KeepAliveTimeout 5。
- 启用压缩与缓存:开启mod_deflate压缩文本/JS/CSS;开启mod_expires设置资源过期;按需启用mod_cache/mod_disk_cache做静态资源缓存。
- 精简模块与关闭目录浏览:仅启用必要模块(如ssl、rewrite、deflate、expires、cache),禁用不需要的模块;在目录配置中关闭Indexes,必要时将AllowOverride设为None以避免频繁.htaccess解析。
- 减少DNS反向查询与信息泄露:设置HostnameLookups Off;隐藏版本信息ServerTokens Prod、ServerSignature Off。
- 优化超时:将Timeout调至5秒(视业务而定)以避免长连接占用。
- 启用HTTP/2(HTTPS下):在端口监听启用 http2,提升并发与首包速度。
二 关键参数与示例配置
- 建议将并发相关参数放入对应MPM的IfModule块中,并遵循“先估算、后压测、再微调”的流程。
| 参数 | 作用 | 建议起点 | 说明 |
|---|---|---|---|
| KeepAlive | 持久连接 | On | 减少TCP握手 |
| MaxKeepAliveRequests | 单连接最大请求数 | 100 | 过高会占用连接资源 |
| KeepAliveTimeout | 持久连接超时 | 5 秒 | 过大浪费资源 |
| Timeout | 请求整体超时 | 5 秒 | 视业务与上游而定 |
| MaxRequestWorkers | 最大并发工作者 | 依内存与MPM估算 | 见下方估算方法 |
| ServerLimit | prefork的Server上限 | 与MaxRequestWorkers匹配 | prefork特有 |
| StartServers/MinSpareServers/MaxSpareServers | 进程池规模 | 依负载阶梯设置 | prefork特有 |
| MaxConnectionsPerChild | 进程回收 | 3000–10000 | 防内存泄漏累积 |
| ThreadsPerChild | 每进程线程数 | 依CPU与内存 | worker/event特有 |
| ServerTokens / ServerSignature | 版本信息暴露 | Prod / Off | 降低攻击面 |
- 估算 MaxRequestWorkers(prefork示例):MaxRequestWorkers ≈ 可用内存 / 单进程RSS。例如:可用内存4 GB、单进程约50 MB,则上限约80;为突发留余量可下调到50–60。
- 示例片段(放在对应MPM的IfModule中,注意不同MPM参数不同,勿混用):
- prefork(适合非线程安全PHP)
< IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 256 MaxRequestWorkers 256 MaxConnectionsPerChild 4000 < /IfModule> - event/worker(适合线程安全栈,如PHP-FPM)
< IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 10000 < /IfModule> - Keep-Alive与压缩缓存(通用)
KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 Timeout 5 HostnameLookups Off ServerTokens Prod ServerSignature Off # 压缩 AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript # 过期策略 ExpiresActive On ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType image/png "access plus 1 year" # 静态资源磁盘缓存(按需) CacheEnable disk / CacheRoot "/var/cache/apache2" CacheDirLevels 2 CacheDirLength 1
- prefork(适合非线程安全PHP)
三 启用HTTP/2与SSL
- 启用HTTP/2:在**/etc/apache2/ports.conf中监听443 ssl http2**,并确保已启用mod_ssl。
- 配置证书与协议:在虚拟主机中设置SSLEngine on、证书与链文件路径;优先启用TLS 1.2/1.3,禁用不安全套件与旧协议。
- 说明:HTTP/2多路复用可显著改善并发与首包时间,但仅在HTTPS下生效。
四 监控验证与上线流程
- 配置与语法检查:
- 语法检查:
sudo apache2ctl configtest - 重启生效:
sudo systemctl restart apache2
- 语法检查:
- 监控与观测:
- 启用状态页(mod_status):ExtendedStatus On,访问/server-status查看总访问、空闲/忙碌工作进程、每秒请求等关键指标。
- 系统监控:
top/htop、vmstat 1、netstat -s、ss -s观察CPU、内存、连接数、套接字状态。
- 压测与调优:
- 使用ab/jmeter进行渐进式压测(并发从低到高),观察吞吐、P95/P99延迟、错误率与系统资源占用,按结果微调MaxRequestWorkers/ThreadsPerChild/KeepAliveTimeout等。
- 日志与维护:
- 合理设置日志级别,避免过多日志影响性能;使用logrotate自动轮转与压缩日志,防止磁盘被占满。
五 场景化建议与注意事项
- 动态站点(PHP等):优先采用event MPM + PHP-FPM,开启mod_deflate/mod_expires,对静态资源使用CDN与磁盘缓存,数据库侧建立索引与查询优化。
- 静态资源为主:开启强缓存(Cache-Control/Expires)、压缩,必要时使用mod_cache/mod_disk_cache;启用HTTP/2提升多资源并发加载。
- 高并发与横向扩展:在单实例调优到瓶颈后,使用mod_proxy_balancer做负载均衡,将流量分发到多台后端。
- 安全与性能平衡:仅启用必要模块,隐藏版本信息,限制访问路径;定期更新系统与Apache获取性能修复与安全补丁。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下Apache2性能如何提升
本文地址: https://pptw.com/jishu/755226.html
