php与apache连接超时的方法

  介绍

这篇文章将为大家详细讲解有关php与apache连接超时的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>前言

要理解浏览器和apache之间的连接超时问题,需要先明白http的维生属性。先简单介绍维生,您可以从网上查找更加详细的介绍。

浏览器和apache都是基于http协议的。而http协议中的维生属性通俗的解释就是浏览器和apache第一次建立TCP连接,传输完数据不会立刻断开这个TCP连接,而是继续等待下一个请求。保持一段时间(keep-alive-time)后才会断开连接。

下面做个测试,查看apache在打开保活支持和关闭维生支持时候的TCP连接状态。

服务端虚拟机上的Centos客户端本机上IE6浏览器服务端地址192.168.212.128客户端地址192.168.212.1访问的文件测试。html & lt; html xmlns=癶ttp://www.w3.org/1999/xhtml"祝辞   & lt; head>   & lt;元http-equiv=癈ontent-Type"内容=皌ext/html;charset=utf-8"/比;   & lt;链接rel=皊tylesheet"类型=拔谋?css"href=https://www.yisu.com/zixun/薄?main.css "/>   <脚本type=" text/javascript“src="。/main.js ">   您知道吗?处和B处的色值是一样的。
     身体   

首先关闭apache的保活参数,打开httpd。相依。

打开浏览器访问apache。使用netstat命令查看连接状态。

# netstat - nt | grep - i ' 80′

可以看到四个连接,因为本地访问速度很快,只能抓取到TIME_WAIT得状态。那一个test.html网页为什么会有四个连接呢?

看test.html的内容可以知道有:

1,主要。css文件

2面。js,文件

3, main.jpg图片

4,本身的test.html文件

所以有四个连接。

再看看关闭apache的保活支持后的连接状态。

重启服务器,浏览器访问测试。html,在查看连接。

#服务httpd重启

# netstat - nt | grep - i的80′

可以看到只有一个连接。而且这个连接状态是成立。我们在httpd . conf中设置了keepAlliveTimeout=15,所以连接建立后15秒后才关闭连接。

<强>测试得到的结论

如果关闭apache的维生属性,访问的页面中的(上例中test.html)所有文件,包括js, css,图片等等都要建立新的TCP连接。有多少引用文件就建立多少个连接。具体多少个文件可以使用火狐的BUG工具查看。

上图中最下面的11个请求就是该网页中需要引用的文件数。

如果开启apache的维生属性,访问的页面中的(上例中的测试。html)所有文件,包括js, css,图片等等只建立一个TCP连接,按照顺序传输所有数据。所有数据传输完等待KeepAliveTimeout=15秒后再关闭该连接。

网上看到的参考:

假如当前Apache每秒响应100个用户访问,KeepAliveTimeout=5,此时httpd进程数就是100 * 5=500个(prefork模式),一个httpd进程消耗5米内存的话,就是500 * 5=2500=2.5克,夸张吧?当然,Apache与客户端只进行了100次TCP连接。如果你的内存够大,系统负载不会太高,如果你的内存小于2.5克,就会用到交换,频繁的交换切换会加重CPU的负载。

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

<强>浏览器的连接超时

每个浏览器都有默认的连接超时时间.IE6的默认时间为60分钟。

这个值可以通过注册表修改。

1,打开注册表:微软HKEY_CURRENT_USER \ Software \ \ Windows \ CurrentVersion \网络设置。

2,增加一个DWORD值的项,命名为ReceiveTimeout,设置1000人。该值的默认单位是毫秒,这里设置的1秒时间。

从浏览器开始访问网站开始,1秒后关闭连接。(设的值有点极端,但是方便展示)。

重启浏览器访问网站。

服务端虚拟机上的Centos客户端本机上IE6浏览器服务端地址192.168.212.128客户端地址192.168.212.1访问的文件索引。php & lt; php ?   回声日期(& # 39;H:我:& # 39;,时间());   睡眠(10);   祝辞;

可以看到浏览器显示找不到服务器,但是访问刚才的test.html是可以访问的。

访问index . php显示连接不成功。因为index . php中睡眠(10)延迟10秒的函数。而IE6的连接超时时间为1秒,所以就连接失败了。

访问测试。hml可以成功连接。因为是访问本地服务器,传输速度很快,在IE6的1秒超时时间之内就已经传完全部数据了。

php与apache连接超时的方法