【WEB】高并发Web服务的演变-节约系统内存和CPU
目前主流浏览器通常可以存在2-6个并发。
连接和请求,占据了服务器的大量CPU和内存等资源。在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要。
缓解“高并发”的压力的手段。
一. Web前端优化,降低服务器压力
1. 减少Web请求
常用的实现方法是通过Http协议头中的expire或max-age来控制,将静态内容放入浏览器的本地缓存,在之后的一段时间里,不再请求Web服务器,直接使用本地资源。在HTML5中的本地存储技术(LocalStorage),也被作为一个数据本地缓存。
2. 减轻Web请求
通过Http协议的Last-Modified或Etag来控制。 这个时候请求服务器,如果是内容没有发生变化,服务器会放回304 Not Modified。这样的话,就不需要每次请求web服务器都做复杂的传输完整数据文件的工作,只是简单的http应答就可以达到相同的效果。
3. 合并页面请求
3.1 合并HTML展示内容。将CSS和JS直接嵌套入HTML页面中,不通过连接的方式引入
3.2 Ajax动态内容合并请求。对于动态内容,将10次Ajax请求合并为1次的批量信息查询。
3.3 小图片合并, 通过CSS的偏移量技术Sprites, 将很多小图片合并为一张。这个优化方式, 在PC端的Web优化中,非常常见。
二. 节约Web服务器端的内存
前端的优化完成,我们就需要着眼于Web服务器端本身。内存是Web服务器非常重要的资源,更多的内存通常意味着可以同时放入更多的工作任务。就Web服务占用内存而言,可以粗略划分:
1. 用来维持连接的基本内存,进程初始化时,会载入一些基础模块到内存。
2. 被传输的数据内容载入到各个缓冲区,占用的内存。
3. 程序执行过程中,申请和使用的内存。
Apache(httpd)的工作模式中,优化内存的方法如下:
1. prefork MPM, 多进程工作模式 。
原理:主进程生成后,它先完成基础的初始化工作,然年,通过fork预先产生一批子进程(子进程复制父进程的内存空间,不需要再做基础的初始化工作),然后等待工作。 之所以预先生成,是为了减少频繁创建和销毁进程的开销。多进程的好处, 是进程之间的内存数据不会相互干扰,同时,某个进程异常终止也不会影响其他进程。但是,就内存而言,每个httpd子进程占用了很多的内存,因为子进程的内存数据是复制父进程的。我们可以粗略认为,这里存在大量的“重复数 据”被放在内存中。最终,导致我们能够生成的子进程最大数量是很有限。在面对高并发时,因为有不少Keep-alive的长连接,将这些子进程“霸占”住,很可能导致可用子进程耗尽。因此,prefork并不太适合高并发场景。
优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。
缺点:一个服务进程占用很多的内存。
2. worker MPM,多进程和多线程的混合模式
worker模式比起prefork,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量很少),然后每个子进程创建一些线程(其中包括一个监听线程)。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会 共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork更省内存,因此会有更多的可用线程。
3. event MPM,多进程和多线的混合模式,引入Epoll
这个是Apache中比较新的模式,在现在的版本(Apache 2.4.10)已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些 keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。它减少了“占据”连接而又不使用的资源浪费,增强了高并发场景下的请求处理能力。因为减少了“闲等”的线程,线程的数量减少,同等场景下,内 存占用会下降一些。
4. 使用比较轻量的Nginx作为Web服务器
5. sendfile节约内存
四. 节约Web服务器的CPU
1. select/poll
2. Epoll(新版的Apache的event MPM,Nginx等支持)
Reference:http://www.admin10000.com/document/6190.html
【WEB】高并发Web服务的演变-节约系统内存和CPU的更多相关文章
- 转---高并发Web服务的演变——节约系统内存和CPU
[问底]徐汉彬:高并发Web服务的演变——节约系统内存和CPU 发表于22小时前| 4223次阅读| 来源CSDN| 22 条评论| 作者徐汉彬 问底Web服务内存CPU并发徐汉彬 摘要:现在的Web ...
- 高并发Web服务的演变——节约系统内存和CPU
节约系统内存和CPU http://www.csdn.net/article/2015-02-12/2823952 Web系统大规模并发——电商秒杀与抢购 http://www.csdn.net/ar ...
- (转)高并发Web服务的演变——节约系统内存和CPU
一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...
- 高并发Web服务的演变:节约系统内存和CPU
一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...
- 高并发 Web 服务的演变:节约系统内存和 CPU
本文内容 越来越多的并发连接数 Web 前端优化,降低服务端压力 节约 Web 服务端的内存 节约 Web 服务器的 CPU 小结 一,越来越多的并发连接数 现在,Web 系统面对的并发连接数呈现指数 ...
- 针对web高并发量的处理
针对web高并发量的处理 针对高并发量的处理 一个老生常谈的话题了 至于需要运维支持的那些cdn.负载均衡神马的就不赘述了 你们都懂的 虫子在此博文只讲一些从程序角度出发的一些不错的解决方案. 至于从 ...
- web 高并发分析
<高并发Web系统的设计与优化>的读后感 一口气看完了<高并发Web系统的设计与优化>,感觉受益匪浅,作者从高并发开始讨论问题,并逐步给出了非常有建设性的想法和建议,是值得我们 ...
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- PHP-学习大规模高并发Web系统架构及开发推荐书籍
以下书籍内容涵盖大型网站开发中几个关键点:高可用.高性能.分布式.易扩展.如果想对大规模高并发Web系统架构及开发有很系统的学习,可以阅读以下书籍,欢迎补充! 一.<Linux企业集群—用商用硬 ...
随机推荐
- SQL语句练习手册--第一篇
表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师 ...
- App功能测试的7大注意点
转载于:https://mp.weixin.qq.com/s/27DZ1EQVpl-gb4S7n-He4g 01 运行 1)App安装完成后的试运行,可正常打开软件. 2)App打开测试,是否有加载状 ...
- C#代码用法
1.new的用法using System;using System.Collections.Generic;using System.Text;namespace yanz{public class ...
- 转: Genymotion使用及离线镜像的安装
Genymotion是一套完整的工具,它提供了Android虚拟环境.由于它比Android自带的模拟器要流畅好多,所以它简直就是开发者.测试人员.推销者甚至是游戏玩家的福音.支持Windows.Li ...
- php代码中使用换行及(\n或\r\n和br)的应用
浏览器识别不了\n或\r\n,这两个换行符是文本换行符,文本文件有效;假设须要将结果输出到浏览器或打印到显示器,代码中使用br;假设仅仅是在源码中换行.则使用\n或\r\n,感兴趣的朋友能够了解下,也 ...
- 方法return外部链接
return new ModelAndView(new RedirectView(url));
- php匿名函数和闭包函数及use关键字传参及Closure匿名函数类
php闭包函数用use传参有什么意义?答:use引用外层变量,比如全局变量 Closure,匿名函数,是php5.3的时候引入的,又称为Anonymous functions.字面意思也就是没有定义名 ...
- css 控制文本显示两行 超过省略号显示
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; word-break: break-all; ov ...
- Angular $httpProvider
timeout超时响应 .factory('timestampMarker', ["$rootScope", function () { var timestampMarker = ...
- Java多线程中的竞争条件、锁以及同步的概念
竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...