中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php與apache連接超時的方法

發布時間:2020-08-21 11:07:15 來源:億速云 閱讀:505 作者:小新 欄目:建站服務器

這篇文章將為大家詳細講解有關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連接狀態。

服務端虛擬機上的Centos
客戶端本機上IE6瀏覽器
服務端地址192.168.212.128
客戶端地址192.168.212.1
訪問的文件test.html
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<link rel="stylesheet" type="text/css" href="./main.css" />  
<script type="text/javascript" src="./main.js"></script>  
</head>  
<body>  
您知道嗎?A處和B處的色值是一樣的。<br/>  
<img src="./main.jpg">  
</body>  
</html>

首先關閉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,此時Apache與Client也是進行了100次 TCP連接。性能卻提升了太多。

瀏覽器的連接超時

每個瀏覽器都有默認的連接超時時間。IE6的默認時間為60分鐘。

這個值可以通過注冊表修改。

1,打開注冊表:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings。

2,增加一個DWORD值的項,命名為ReceiveTimeout,設置1000。該值的默認單位是毫秒,這里設置的1秒時間。

從瀏覽器開始訪問網站開始,1秒后關閉連接。(設的值有點極端,但是方便展示)。

重啟瀏覽器訪問網站。

服務端虛擬機上的Centos
客戶端本機上IE6瀏覽器
服務端地址192.168.212.128
客戶端地址192.168.212.1
訪問的文件index.php
<?php  
echo date('H:i:s',time());  
sleep(10);  
?>

可以看到瀏覽器顯示找不到服務器,但是訪問剛才的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:一個表單提交的最長時間。

這兩個值很重要。我們做個測試:

服務端虛擬機上的Centos
客戶端本機上IE6瀏覽器
服務端地址192.168.212.128
客戶端地址192.168.212.1
訪問的文件index.php
<?php  
for($i = 0;;$i++){  
 echo date('H:i:s',time());  
 echo '<br/>';  
 flush();  
}  
?>
max_execution_time30

訪問index.php。

<?php  
for($i = 0;;$i++){  
 echo date('H:i:s',time());  
 echo '<br/>';  
 flush();  
}  
?>


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連接超時的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诏安县| 始兴县| 延寿县| 黄石市| 甘孜| 石景山区| 长阳| 渑池县| 桓仁| 宣恩县| 文安县| 怀化市| 阿拉善盟| 吉安县| 阳泉市| 襄城县| 大埔县| 南宁市| 甘孜县| 开远市| 花莲市| 任丘市| 乐陵市| 崇仁县| 镇江市| 仙游县| 日照市| 敦化市| 彭泽县| 方正县| 藁城市| 靖州| 祁东县| 翼城县| 酒泉市| 南澳县| 定边县| 梧州市| 合山市| 怀安县| 临猗县|