不可忽略的apache 的 Keep Alive

转载链接:http://hi.baidu.com/jx_iben/item/d5fe91feed74495ec9f337f1

在网页开发过程中,Keep-Alive是HTTP协议中非常重要的一个属性。大家知道HTTP构建在TCP之上。在HTTP早期实现中,每个HTTP请求都要打开一个socket连接。这种做效率很低,因为一个Web 页面中的很多HTTP请求都指向同一个服务器。例如,很多为Web页面中的图片发起的请求都指向一个通用的图片服务器。持久连接的引入解决了多对已请求服务器导致的socket连接低效性的问题。它使浏览器可以再一个单独的连接上进行多个请求。浏览器和服务器使用Connection头ilai指出对Keep-Alive的支持。

 

笔者在去年遇到一个跟Keep-Alive的问题:

 

问题现象: 一个JSP页面,居然要耗时40多秒。网页中有大量的图片的CSS

 

问题解决: 原因也找了半天,原来Apache配置里面,把Keep-Alive的开关关闭了。这个是个大问题,工程师为什么要关闭它,原来他考虑的太简单了,我们知道Apache适合处于短连接的请求,处理时间越短,并发数才能上去,原来他是这么考虑,但是没有办法,只能这样了,还是打开Keep-Alive开关吧。

 

当然,不是所有的情况都设置KeepAlive为On,下面的文字总结比较好:

 

【在使用apache的过程中,KeepAlive属性我一直保持为默认值On,其实,该属性设置为On还是Off还是要具体问题具体分析的,在生产环境中的影响还是蛮大的。

KeepAlive选项到底有什么用处?如果你用过Mysql ,应该知道Mysql的连接属性中有一个与KeepAlive 类似的Persistent Connection,即:长连接(PConnect)。该属性打开的话,可以使一次TCP连接为同一用户的多次请求服务,提高了响应速度。

比如很多网页中图片、CSS、JS、Html都在一台Server上,当用户访问其中的Html网页时,网页中的图片、Css、Js都构成了访问请求,打开KeepAlive 属性可以有效地降低TCP握手的次数(当然浏览器对同一域下同时请求的图片数有限制,一般是2),减少httpd进程数,从而降低内存的使用(假定prefork模式)。MaxKeepAliveRequests 和KeepAliveTimeOut 两个属性在KeepAlive =On时起作用,可以控制持久连接的生存时间和最大服务请求数。

不过,上面说的只是一种情形,那就是静态网页居多的情况下,并且网页中的其他请求与网页在同一台Server上。当你的应用动态程序(比如:php )居多,用户访问时由动态程序即时生成html内容,html内容中图片素材和Css、Js等比较少或者散列在其他Server上时,KeepAlive =On反而会降低Apache 的性能。为什么呢?

前面提到过,KeepAlive =On时,每次用户访问,打开一个TCP连接,Apache 都会保持该连接一段时间,以便该连接能连续为同一client服务,在KeepAliveTimeOut还没到期并且MaxKeepAliveRequests还没到阈值之前,Apache 必然要有一个httpd进程来维持该连接,httpd进程不是廉价的,他要消耗内存和CPU时间片的。假如当前Apache 每秒响应100个用户访问,KeepAliveTimeOut=5,此时httpd进程数就是100*5=500个(prefork 模式),一个httpd进程消耗5M内存的话,就是500*5M=2500M=2.5G,夸张吧?当然,Apache 与Client只进行了100次TCP连接。如果你的内存够大,系统负载不会太高,如果你的内存小于2.5G,就会用到Swap,频繁的Swap切换会加重CPU的Load。

现在我们关掉KeepAliveApache 仍然每秒响应100个用户访问,因为我们将图片、js、css等分离出去了,每次访问只有1个request,此时httpd的进程数是100*1=100个,使用内存100*5M=500M,此时Apache 与Client也是进行了100次TCP连接。性能却提升了太多。

总结:

1、当你的Server内存充足时,KeepAlive =On还是Off对系统性能影响不大。

2、当你的Server上静态网页(Html、图片、Css、Js)居多时,建议打开KeepAlive

3、当你的Server多为动态请求(因为连接数据库,对文件系统访问较多),KeepAlive 关掉,会节省一定的内存,节省的内存正好可以作为文件系统的Cache(vmstat命令中cache一列),降低I/O压力。

PS:当KeepAlive =On时,KeepAliveTimeOut的设置其实也是一个问题,设置的过短,会导致Apache 频繁建立连接,给Cpu造成压力,设置的过长,系统中就会堆积无用的Http连接,消耗掉大量内存,具体设置多少,可以进行不断的调节,因你的网站浏览和服务器配置 而异


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

码云 Gitee 新增仓库访问之 IP 白名单功能

码云企业版上线 IP 白名单功能,该功能主要用于企业禁止非指定 IP 访问代码仓库。如下图所示:使用方法:进入企业控制面板 -> 管理 -> 安全设置添加允许访问 Git 仓库的 IP 地址启用安全选项:只允许在信任范围内推拉代码其他关…

oracle 实时查询最耗CPU资源的SQL语句

1. 先通过top命令查看产用资源较多的spid号 2.查询当前耗时的会话ID,用户名,sqlID等:select sid,serial#,machine,username,program,sql_hash_value,sql_id, to_char(logon_time,yyyy/mm/dd hh24:mi:ss) as login_time from v$sessionw…

福利 | 抽奖送现金送书《Web前端工程师修炼之道》

很多关注了我的公众号的粉丝可能都不知道我,趁这次机会简单介绍下。你好,我是若川。江西人,某不那么知名的陶瓷大学毕业生,目前在杭州从事前端开发工作。常以若川为名混迹于江湖。更详细的可以点击关于我我历时一年才写了《学习源…

jQuery 1.9.1中live()变更

转载链接:http://www.360doc.com/content/13/1222/22/14022539_339358149.shtml 开始的时候在jQuery.1.7.1中使用了.live()觉得很好用,特别是在绑定事件之后再加入的元素的事件绑定上很方便(第一次live之后以后添加的元素就不需要绑定啦) 后来jQuery更…

蒙特卡洛方法_基本理论-蒙特卡洛方法与定积分

全球图形学领域教育的领先者、自研引擎的倡导者、底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持。我们正在用实际行动来帮助小伙伴们…

WebServices 基础知识

1. 有关生存期的补充正常情况下,每次调用 WebMethod,服务器都会创建一个新的 WebService 对象,即便客户端使用同一个代理对象多次调用 WebMethod。而我们一旦调用了有缓存标记的 WebMethod,只要未超出缓存期,WebServic…

sass和compass基础用法

一、基本命令 sass都是通过gem安装,以下是一些基础的命令移除ruby的镜像地址 gem sources --remove https://rubygems.org/添加淘宝的镜像 gem source -a http://ruby.taobao.org查看镜像 gem source -v单文件转换命令 sass style.scss style.css单文件监听命令&am…

字节面试官:如何实现Ajax并发请求控制

偷偷告诉你,点此抽奖送红包还送3本比红宝书还贵的书实现一个批量请求函数 multiRequest(urls, maxNum),要求如下: • 要求最大并发数 maxNum • 每当有一个请求返回,就留下一个空位,可以增加新的请求 • 所有请求完成后…

Jquery 中 ajaxSubmit使用讲解

转载链接&#xff1a;http://blog.csdn.net/h70614959/article/details/8810270 1 引入依赖脚本 <script type"text/javascript" src"/js/jquery/jquery.form.js"></script> //ajaxForm 依赖脚本<script type"text/javascript"…

接口与抽象类

接口中的属性 默认是 public static final类型 就算你不加 默认也是存在 方法默认都是public abstract类型 不加默认也存在 比如 interface K { String abc"sdfd"; void add() throws Exception; } 实际上编译时 是这样 interface K { Public static final String a…

制造行业电子化签约及印控一体化解决方案

当生产“智造化”、营销“数字化”成为趋势&#xff0c;生产制造型企业如何实现产品生产-销售全流程提速降本&#xff1f;生产制造型企业为了在生产、营销环节降低成本、提升效率&#xff0c;经营模式上常有如下特征&#xff1a;• 原料导向&#xff0c;多点协同生产&#xff1…

python 点击按钮采集图片_python多线程采集图片

cmd中运行>python untitled2.py 图片的网站import requestsimport threadingfrom bs4 import BeautifulSoupimport sysimport osif len(sys.argv) ! 2:print("Usage : " )print(" python main.py [URL]" )exit(1)# config-starturl sys.argv[1]thre…

一起手写Vue3核心模块源码,掌握阅读源码的正确方法

最近和一个猎头聊天&#xff0c;说到现在前端供需脱节的境况。一方面用人方招不到想要的中高级前端&#xff0c;另一方面市场上有大量初级前端薪资要不上价。特别是用 Vue 框架的&#xff0c;因为好上手&#xff0c;所以很多人将 Vue 作为入门框架&#xff0c;但学得深的人并不…

jquery|javascript 回车事件

转载链接&#xff1a;http://www.cnblogs.com/wenbo/archive/2011/08/20/2147014.html 转载链接: http://www.2cto.com/kf/201202/119741.html jquery实现回车事件&#xff0c;代码如下&#xff1a; 全局&#xff1a; $(function(){ document.onkeydown function(e){…

【Vegas原创】ASP 0131 不允许父路径的解决

现象&#xff1a; Active Server Pages 错误 ASP 0131 不允许的父路径 /admin/login.asp&#xff0c;行 2 包含文件 ../include/config.asp 不能用 .. 表示父目录。 解决方案&#xff1a; IIS6>站点属性>主目录>配置>选项>启用父路径 转载于:https://www.cnblog…

腾讯正式宣布成立技术委员会,要对组织架构下狠手

2019 年伊始&#xff0c;社交巨人腾讯正式宣布成立技术委员会&#xff0c;计划在未来发力内部代码的开源和协同&#xff0c;投入更多资金和精力在技术建设上。BAT 三家里一直被诟病技术建设落后的腾讯&#xff0c;终于开始补足自己的短板。这会对腾讯自身带来什么&#xff1f;又…

2020 前端技术发展回顾

大家好&#xff0c;我是若川&#xff0c;今天给大家分享一篇来自阿里妈妈前端快爆的好文。另外&#xff0c;偷偷告诉你&#xff0c;截止今晚9点 点此抽奖送红包还送3本比红宝书还贵的书可以点击文章末尾阅读原文直达知乎链接&#xff0c;以下是正文2020 终究是一个不平凡的一年…

php验证码函数 使用imagestring() imagefttext()设置字体大小

转载路径&#xff1a;http://hi.baidu.com/asdasd_cn/item/62977d1e26ca36e85e53b142 生成验证码图片的两个函数 第一个是用imagestring bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ) imagestring() 用 col …

提取地图中道路_非机器学习方法·从遥感影像中提取道路

本科低年级曾经做过一个提取道路线的题目。提供的数据&#xff1a;老师给我们了一幅学校周边地区的影像&#xff0c;包括RGBInfrared四个波段。一开始使用的方法&#xff1a;当时尚青涩的我和小伙伴们一起使用KMEANS、阈值分割等等方法试图将那道路从影像中分离出来。遇到的问题…

图片尺寸自适应

图片尺寸自适应 οnlοad"javascript:if(this.height>this.width){this.height100}else{this.width100} 转载于:https://www.cnblogs.com/TangZhongxin/archive/2009/12/14/3942483.html