Apache   发布时间:2019-11-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了apache优化之keepalive大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

<p class="d_post_content">在说apache的keepalive之前,我们需要对web数据的加载过程有些简单的了解这里先介绍一个测试网站加载工具:Pingdom Tools ,在这个工具中,我们输入一个网址来测试下加载速度,同时最重要的是观察加载过程:

<img border="0" src="https://cn.js-code.com/res/2019/02-07/12/b78474f6acc05c1332c8fd1e2e2b48e5.jpg" alt="">其中每块的含义是:黄色是http的启动时间,绿色是http请求的链接时间,蓝色是加载时间;从这个结果图中,我们可以看到:1)所有的请求,这里指的是http请求,都是分为三步走的,第一步启动,第二步链接,第三步正式下载2)所有的网页,首先启动首页的http请求,链接请求,并且下载主页上部的数据,下载这部分数据是只能有一个http请求下载3)当主页中上部分数据下载完成之后,会下载遇到的css js文件(注:这个工具不统计js),在以后的数据下载中,会并发10个http请求同时下载4)在下载当前10个http请求数据的时候,其他资源需要等待,所以,在优化的过程中,我们要注意web资源的数量5)下载某个web资源时候,如果该资源比较大,当然需要很长时间加载了,所以还要注意大小。在以上测试中,没有涉及到请求下载资源过程中还有一个部分:TCP请求的链接与断开,而这篇文章正式说这个请求的。那么http请求和tcp请求是什么关系呢?@R_382_10944@就是一个tcp请求是比较靠近底层的,在它上面是http之类的应用请求,所以可以认为一个tcp请求包括很多个http请求(至于包括多少,apache中可以设定),同时tcp的链接与断开比http请求的链接和断开更需要消耗掉更多的内存资源和时间。先来说说Apache的KeepAlive的设置。KeepAlive在Apache Core中的设置说明: Keep-Alive扩展自http/1.0和http/1.1的持久链接特性。提供了长效的http会话,用以在同一个TCP连接中进行多次请求。在某些情况下,这样的方式会对包含大量图片的HTML文档造成的延时起到50%的加速作用。在Apache1.2版本以后,您可以设置 KeepAlive On 以启用持久链接。 对于http/1.0的客户端来说,仅当客户端指定使用的时候才会使用持久链接连接。此外,仅当能够预先知道传输的内容长度时,才会与http/1.0的客户端建立持久链接连接。这意味着那些长度不定的内容,诸如CGI输出、SSI页面、以及服务器端生成的目录列表等内容一般来说将无法使用与http/1.0客户端建立的持久链接连接。而对于http/1.1的客户端来说,如果没有进行特殊指定,持久将是默认的连接方式。如果客户端进行了请求,将使用分块编码以解决在持久链接里发送未知长度内容的问题。另一个相关的是KeepAliveTimeout在Apache Core中的设置说明: Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求,超时值将会被设置为Timeout指令指定的秒数。 对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。后最后还有一个相关的是MaxKeepAliverequests在Core中的说明: MaxKeepAliverequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。通过Apache的设置说明,我们已经能明白KeepAlive的原理。在对于一个包含许多图片的网页来说, 客户端会在瞬间发出多个http请求,此时多次建立TCP连接会大大降低响应速度。 此时通过持续连接,可以允许用户在一个TCP连接中发出多个http请求, 减少TCP连接建立次数,提高响应速度。我们可以通过access_log统计出连续http请求出现的次数、间隔时间、访问量, 以确定 MaxKeepAliverequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用;太大了,持续连接迟迟不断, 浪费TCP连接数不说,更糟糕的是系统中的 httpd 进程数目会因此不断增加, 使得系统负载升高,甚至会导致服务器失去响应。但是当你的服务器只是在处理动态网页请求时,由于用户很少会瞬间请求多个动态网页 (一般都是打开页面之后阅读好半天才点下一页), 此时打开KeepAlive无异于浪费TCP连接数。哪么什么决定着我们是不是要开启KeepAlive的因素就很简单的确定出来了,就是说在用户一个页面请求中是否会向服务器发出多个http的请求。对于我的哪个朋友,他们的服务器中有着动态应用,有着所有的图片,我看了一下,估算他们的首页中发出的请求类型为以下几种:text/html、text/css、application/octet-stream、text/javascript、image/gif、image/jpeg。一个首页发出了181次请求(我看了所有的请求,注意所有的请求都是同一个域名)。这里可能由应用程序生成的只有text/html和application/octet-stream,这种请求中text/html只有一次,而Application/octet-stream也只有4次。哪么关闭KeepAlive对他们有帮助吗?我的回复是没有帮助,而且会让服务器的服务质量更差!如果是这样的情况,怎么办呢?


<p class="d_post_content"><strong style="color: #ff0000; font-size: 14pt"> 


<p class="d_post_content"><strong style="color: #ff0000; font-size: 14pt">我的建议如下:


<p class="d_post_content"> <strong style="color: #0000ff">1.如果我们每一个页面中只有一个请求是动态生成的,而180个(里面可能有4个不是,不过不重要了)都是静态的,哪么应该将静态与动态分开到两个服务器上(一台机器都可以)。将动态应用的KeepLive关闭,将静态服务器的KeepLive打开。


<strong style="color: #0000ff">
<p class="d_post_content">2.前端前部署四层交换或七层交换或缓存服务器,这样会让系统的扩展做起来,同时也可以让服务器的KeepLive打开时有更好的效果。


<p class="d_post_content"> 3.应该虑优化下他们的apache了,听说一个进程有高达xxM的内存占用,比较恐怖,在10M以内比较正常的说,不过这是一个option了。如何验证你的服务器apache是否开启了该功能(你要是买的是虚拟空间,一般网管不会给你开启的,因为消耗太多内存)?站长站工具查询,和gzip压缩一起查询的。总结:长连接既有优点也有缺点,一方面长连接的话会造成内存消耗过大,另一方面apache的此种长连接对于动态请求和静态请求的效果不同,对于动态请求不好,一个请求就占用一段tcp,对于静态内容,可以同时下载多个http请求,是有好处的,所以猜想:把web分为个服务器,一个服务器存放静态的html css js 尤其图片,一个服务器存放动态的页面请求,按照理论上来说,效果会更好,但是具体实际效果以及测试数据我现在并没有测试。

大佬总结

以上是大佬教程为你收集整理的apache优化之keepalive全部内容,希望文章能够帮你解决apache优化之keepalive所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: