HTTP服务器,是支撑全球网站的核心技术当中的一个,它的并发性能,直接就决定了网站在高流量状况下的响应速度,以及稳定性。
这篇文章会给出,以Apache HTTP Server作为基础的,深度的配置以及优化方案,助力你于现有的硬件根基之上,发掘出更大的服务潜在能力。
精准选择核心处理模块
Apache借助多处理模块去管理网络连接,以及对请求进行处理,而选对MPM乃是性能优化的基石。
于Linux系统之上,Prefork、Worker以及Event这三种MPM,各自有着不同侧重,得依据网站类型来进行选择。
独立的进程,被Prefork模型为每个请求启动,进程之间,内存隔离性很强,稳定性极其高。
但它耗费内存较多,若并发达到1000,或许会需要损耗数GB内存 ,它是适合兼容性需求高的老牌应用。
Worker模型运用多进程与多线程的混合模式,每个进程对多个线程进行管理,其内存占用相较于Prefork减少了大约30%。
它更适合高并发场景,但需要注意第三方模块的线程安全性。
StartServers 8
MinSpareServers 5
MaxSpareServers 20
MaxClients 150
MaxRequestsPerChild 1000
Event模型 ,它是基于Worker的改进版本 ,它专门针对Keep,- Alive连接的处理进行了优化。
它于处理诸多长连接之际展现出出众水平,在相同的并发情况之下,其CPU占用率相较于Worker而言,要低百分之十五到百分之二十。
精细调控Keep-Alive参数
同一TCP连接,能让客户端借由Keep - Alive机制,发送多个请求,以此避免频繁出现的三次握手开销。
但参数设置不当反而会消耗服务器资源。
需启用Keep - Alive,要同时配置三个指令,分别是KeepAlive On,还有MaxKeepAliveRequests,以及KeepAliveTimeout。
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 1000
就设置MaxKeepAliveRequests而言,建议将其设定为超过100,以此来防止在处理请求这块,单个连接所承担得太少。
KeepAliveTimeout对服务器等待下一个请求的时间起到控制作用,一般会将其设定为2至5秒。
时段延续过长,会致使进程或者线程被闲置连接占据,使得服务器处理全新请求的能力下降。
构建多层级缓存体系
诸多缓存,能够切实有效地减轻后端服务器进行计算这个动作所产生的压力,Apache对多种缓存机制予以支持,可组合起来使用。
由mod_cache模块所提供的服务,是那种基于磁盘的HTTP缓存服务,或者是基于内存的HTTP缓存服务。
启用了mod_cache之后,要去配置CacheRoot以及CacheEnable指令,以此来指定缓存路径,还要指定生效URL。
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 1000
对于静态资源而言,能够将CacheDefaultExpire设置成3600秒,其缓存的有效期限不会超出一天。
能够通过mod_expires模块来设置Expires头的动态内容,可使浏览器直接进行缓存。
可对图片、CSS以及JavaScript文件设置7至30天的过期时间,以此减少超过40%的重复请求。
突破并发连接数限制
服务器默认配置往往保守,需要根据硬件资源调整并发上限。
所主要涉及的,是ServerLimit这个参数,还有MaxRequestWorkers这个参数,以及MaxConnectionsPerChild这个参数。
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
能够决定MaxRequestWorkers最大值的ServerLimit,于Event模式之际一般被设置成16到32。
MaxRequestWorkers所表达的是同时进行处理的请求数量,这一数量的确定是需要依据内存大小来进行计算的,而每一个线程大约会占用1至2MB内存。
MaxConnectionsPerChild对那子进程处理请求数上限予以控制,建议是来设置成1000至10000。
合理的取值可以防止内存泄漏积累,定期回收进程保证稳定性。
部署内容分发网络
用户最近的节点处,CDN可把静态资源进行分发,源站带宽压力能被显著降低。
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
CacheRoot "/var/cache/apache2/mod_cache_disk"
全球范围内,占据主流地位的CDN服务商,具备多达数千个的边缘节点,能够让资源加载的整体速度,实现提升幅度在50%以上的效果。
把静态资源域名解析到CDN服务商,这是配置CDN所需要做的,并且还要在源站设置Access-Control-Allow-Origin头。
图片、视频类网站可以开启CDN的分片传输和实时压缩功能。
通过CDN加速,动态内容同样能够实现,借助动态路由优化技术,选择最佳回源路径。
大型的电商类型平台网站,在部署了CDN之后,其首屏所进行的渲染这一表现时间,往往能够在原本基础上缩短百分之三十至百分之六十。
优化超时与状态监控
合理的超时设置能防止资源被异常连接长期占用。
Timeout指令,对接收数据、发送数据的最大等待时间施加控制,一般会将其设定为60秒。
MaxClients 150
ServerLimit 150
ThreadLimit 150
凭借mod_status开启服务器状态监控,进行配置ExtendedStatus On以得到详细信息。
连接到/server-status这个特定页面,能够去查看当下的连接数量情况,还可以知晓中央处理器利用率为多少,并且还要了解请求处理在各个方面分布是怎样的。
将error_log以及access_log定期予以分析,能够发觉其中的性能瓶颈之处。
借助logresolve工具来解析IP地址,联合awstats等工具去生成可视化报表,以此为后续优化给予数据支持。
你是否在实际运维中遇到过服务器负载飙升却找不到原因的情况?
于评论区域之中分享你那优化方面的经验是受到欢迎的,通过点赞的行为能够使得更多的开发者看到这些具备实用性质的技巧。

Comments NOTHING