【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企业集群—用商用硬 ...
随机推荐
- go语言25个关键字总结
var和const :变量和常量的声明var varName type 或者 varName : = valuepackage and import: 导入func: 用于定义函数和方法return ...
- Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
1.Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'. 原因解析: gradle ...
- JavaScript 数组去重 方法汇总
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- Velocity.js动画库使用
1.简介 Velocity 是一个简单易用.高性能.功能丰富的轻量级JS动画库.它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用. 2 ...
- STL学习笔记(非变动性算法)
辅助函数 本节跟以后几节将对所有STL算法逐一详细讨论.为了简化这些例子,我们使用了一些辅助函数,分别用于对容器进行输出跟插入操作. #ifndef ALGOSTUFF_HPP #define ALG ...
- spring集成PHPRPC及使用
PHPRPC,它的商业版本是Hprose.这里仅记录其使用方法.其它相关内容可自行搜索. 对于开源的东西,建议大家看看其源码. 1.需要引入的jar包:phprpc_spring.jar,http:/ ...
- LeetCode LinkList 23. Merge k Sorted Lists
这两天一直也没有顾上记录一下自己做过的题目,回头看看,感觉忘的好快,今天做了一个hard,刚开始觉得挺难得,想了两种方法,一种是每次都从k个list中选取最小的一个,为空的直接跳过,再就是每次合并其中 ...
- cache和buffer区别探讨
一. 1.Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的.它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用.比如生产者——消费者问题,他们产生和消耗资源的速度大体 ...
- 【已解决】ckfinder_php_3.4.4 IIS 报错 无效请求
ckfinder_php_3.4.4 IIS 报错 无效请求 (Invalid request) Apache 正常,但是在IIS环境下报错,解决方法 设置 C:\Windows\Temp 目录 给 ...
- android open source
https://github.com/Cleveroad https://github.com/ddwhan0123/Useful-Open-Source-Android https://github ...