php与apache连接超时的方法


这篇文章将为大家详细讲解有关php与apache连接超时的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言要理解浏览器和apache之间的连接超时问题,需要先明白http的keep-alive属性。先简单介绍keep-alive,您可以从网上查找更加详细的介绍。浏览器和apache都是基于http协议的。而http协议中的keep-alive属性通俗的解释就是浏览器和apache第一次建立TCP连接,传输完数据不会立刻断开这个TCP连接,而是继续等待下一个请求。保持一段时间(keep-alive-time)后才会断开连接。下面做个测试,查看apache在打开keep-alive支持和关闭keep-alive支持时候的TCP连接状态。首先关闭apache的keep-alive参数,打开httpd.conf。打开浏览器访问apache。使用netstat命令查看连接状态。#netstat –nt|grep –i ’80′可以看到四个连接,因为本地访问速度很快,只能抓取到TIME_WAIT得状态。那一个test.html网页为什么会有四个连接呢?看test.html的内容可以知道有:1,main.css 文件2,mian.js 文件3,main.jpg 图片4,本身的test.html文件所以有四个连接。再看看关闭apache的keep-alive支持后的连接状态。重启服务器,浏览器访问test.html,在查看连接。#service httpd restart#netstat –nt|grep –i ’80′可以看到只有一个连接。而且这个连接状态是ESTABLISHED。我们在httpd.conf中设置了keepAlliveTimeout=15,所以连接建立后15秒后才关闭连接。测试得到的结论如果关闭apache的keep-alive属性,访问的页面中的(上例中test.html)所有文件,包括js,css,图片等等都要建立新的TCP连接。有多少引用文件就建立多少个连接。具体多少个文件可以使用火狐的BUG工具查看。上图中最下面的11个请求就是该网页中需要引用的文件数。如果开启apache的keep-alive属性,访问的页面中的(上例中的test.html)所有文件,包括js,css,图片等等只建立一个TCP连接,按照顺序传输所有数据。所有数据传输完等待KeepAliveTimeout =15秒后再关闭该连接。网上看到的参考:假如当前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。现在我们关掉KeepAlive,Apache仍然每秒响应100个用户访问,因为我们将图片、js、css等分离出去了,每次访问只有1个 request,此时httpd的进程数是100*1=100个,使用内存100*5M=500M,此时Apa开发云主机域名che与Client也是进行了100次 TCP连接。性能却提升了太多浏览器的连接超时每个浏览器都有默认的连接超时时间。IE6的默认时间为60分钟。这个值可以通过注册表修改。1,打开注册表:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings。2,增加一个DWORD值的项,命名为ReceiveTimeout,设置1000。该值的默认单位是毫秒,这里设置的1秒时间。从浏览器开始访问网站开始,1秒后关闭连接。(设的值有点极端,但是方便展示)。重启浏览器访问网站。可以看到浏览器显示找不到服务器,但是访问刚才的test.html是可以访问的。访问index.php显示连接不成功。因为index.php中sleep(10)延迟10秒的函数。而IE6的连接超时时间为1秒。所以就连接失败了。访问test.hml可以成功连接。因为是访问本地服务器,传输速度很快,在IE6的1秒超时时间之内就已经传完全部数据了。测试得到的结论IE6的默认连接超时时间为60分。可以通过注册表中ReceiveTimeout值修改该值。实际作用:使用IE6往服务器上传一个大文件,如果上传时间超过60分钟就会断开连接。这也是为什么有些网站要专门开发active插件来实现IE6的大文件上传了。用户是不会主动修改这个值的。apache的连接超时看apache的配置文件可以看到有个timeout值。有人会以为这个是apache的连接超时参数。我们把它设置为timeout =1访问index.php。看到还是可以访问的,那么这个timeout不是apache的连接超时时间。timeout是apache收到上一个请求和后面一个请求到来之间的最大值。您可以查看浏览器与apache通讯中的TCP连接状态迁移更加准确的明白timeout的值。那么apache的连接超时时间到底是多少?是什么参数控制呢?答:apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。那么服务端是什么控制了浏览器和apache之间的最大连接超时时间呢?答:linux测试得到的结论apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。linux的连接超时在linux的系统配置中可以到关于连接时间的有这两个参数。#sysctl -a|grep time一个是限制FIN_WAIT状态的超时时间,一个是限制keepalive连接的超时时间。结论linux的默认配置下也没控制浏览器和apache连接超时的参数,只有通过linux的防火墙才能控制apache和浏览器之间连接的最大连接时间。PHP的操作超时打开php.ini可以看到两个参数。max_execution_time:一个php程序执行的最长时间。max_input_time:一个表单提交的最长时间。这两个值很重要。我们做个测试:访问index.php。
30秒后IE死掉了。为什么呢?答:index.php中有死循环。执行到max_execution_time=30秒后php停止了操作。浏览器这边死掉了。总结如果从头到尾看完上面的内容,会得出如下结论:1,在客户端,浏览器控制着浏览器和apache的最大连接超时时间。2,在服务端(不打开防火墙),linux和apache都不能控制最大连接超时时间,只有php或者mysql等运行程序通过控制自身的执行时间来控制浏览器和apache的最大连接超时时间。3,在服务端(打开防火墙),linux上的防火墙和php,mysql等共同控制浏览器和apache的最大连接超时时间。4,这里的浏览器和apache的最大连接超时时间包括TCP连接中的所有状态超时时间的综合。关于php与apache连接超时的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: 织梦DEDECMS仿DoNews右侧最新评论的方法

织梦DEDECMS仿DoNews右侧最新评论的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!织梦DEDECMS怎么仿DoNews右侧最新评论?这个评论的功能不错的.在DED…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/16 08:41
下一篇 03/16 08:41

相关推荐