如何在Ubuntu上优化Apache并发连接
导读:Ubuntu上优化Apache并发连接的实用步骤 一 选择并切换合适的MPM 查看当前MPM:执行 apache2ctl -M | grep mpm,常见为 mpm_prefork、mpm_worker、mpm_event。 切换示例(以...
Ubuntu上优化Apache并发连接的实用步骤
一 选择并切换合适的MPM
- 查看当前MPM:执行 apache2ctl -M | grep mpm,常见为 mpm_prefork、mpm_worker、mpm_event。
- 切换示例(以event为例):
- 禁用prefork并启用event:sudo a2dismod mpm_prefork & & sudo a2enmod mpm_event
- 重启:sudo systemctl restart apache2
- 选型建议:
- prefork:每个进程处理一个请求,兼容性好(如非线程安全模块/PHP),但内存占用高。
- worker/event:多进程+多线程,资源利用更高效,适合高并发;event在长连接/慢客户端场景更优。
- 配置路径:MPM配置通常在 /etc/apache2/mods-enabled/mpm_*.conf,主配置在 /etc/apache2/apache2.conf。
二 调整MPM关键参数
- 通用思路:让 MaxRequestWorkers(或MaxClients) 与可用内存匹配,避免OOM;结合并发模型与业务特点设置超时与进程/线程规模。
- 示例配置(放在对应IfModule块内,修改后重载):
| MPM | 关键参数与示例值 | 说明 |
|---|---|---|
| prefork | StartServers 5;MinSpareServers 5;MaxSpareServers 10;MaxRequestWorkers 150;MaxConnectionsPerChild 0 | 进程模型,值过大易占满内存;适合非线程安全环境。 |
| event/worker | StartServers 2–4;MinSpareThreads 25;MaxSpareThreads 75;ThreadsPerChild 25;MaxRequestWorkers 150–400;MaxConnectionsPerChild 1000–10000;ThreadLimit 64 | 线程模型,并发更高;event更擅长处理长连接与空闲保持。 |
- 提示:部分发行版/版本中 MaxClients 已被 MaxRequestWorkers 取代,二者含义相近;调整 ServerLimit 仅在需要突破默认进程数限制时配合设置。
三 优化连接与超时参数
- 启用并调优持久连接(KeepAlive):
- KeepAlive On
- MaxKeepAliveRequests 100(每连接可复用请求数)
- KeepAliveTimeout 2–5(秒,繁忙站点取低值,减少占用)
- 合理的总超时:
- Timeout 30–60(秒,避免过长等待占用连接)
- 适度降低日志开销:
- LogLevel warn(减少磁盘I/O与CPU消耗)
- 作用:减少TCP/SSL握手与连接建立次数,缩短等待,释放更多并发槽位。
四 启用压缩与缓存减轻后端压力
- 启用压缩(mod_deflate):
- 模块:sudo a2enmod deflate
- 配置:
< IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript < /IfModule>
- 启用缓存(mod_cache + mod_cache_disk + mod_expires):
- 模块:sudo a2enmod cache & & sudo a2enmod cache_disk & & sudo a2enmod expires
- 配置:
< IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" < /IfModule> < IfModule mod_cache.c> < IfModule mod_cache_disk.c> CacheRoot "/var/cache/apache2/mod_cache_disk" CacheEnable disk / CacheDirLevels 2 CacheDirLength 1 < /IfModule> < /IfModule>
- 效果:显著降低传输体积与后端渲染/数据库压力,提升首屏与整体吞吐。
五 监控验证与进一步扩展
- 启用状态页(mod_status)并本地访问:
- 模块:sudo a2enmod status
- 配置:
< Location "/server-status"> SetHandler server-status Require local < /Location> - 访问:http://服务器IP/server-status 查看总访问、空闲/忙碌工作进程/线程、每秒请求等指标。
- 系统监控与压测:
- 资源:htop、sar
- 压测:ab(如:ab -n 10000 -c 200 http://域名/)
- 扩展方案:当单机并发与资源达到瓶颈时,可在前端部署 HAProxy/Nginx 做负载均衡,横向扩展后端Apache节点。
附 快速估算与落地步骤
- 估算可用并发(保守):
- 若单进程/线程常驻内存约 50–80MB,可用内存 4GB,则大致可用并发数 ≈ 4000–8000MB ÷ 60–80MB ≈ 50–130。据此设置 MaxRequestWorkers 并留有余量。
- 落地顺序:
- 选择并切换到 mpm_event;2) 按内存与压测调 MaxRequestWorkers/ThreadsPerChild;
- 调 KeepAlive/Timeout;4) 启用 deflate/cache/expires;
- 打开 server-status 与 htop/sar 观察,必要时引入 HAProxy/Nginx。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上优化Apache并发连接
本文地址: https://pptw.com/jishu/764544.html
