程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> apache的keepalive和keepalivetimeout(apache優化)

apache的keepalive和keepalivetimeout(apache優化)

編輯:PHP基礎知識
 

在APACHE的httpd.conf中,KeepAlive指的是保持連接活躍,類似於Mysql的永久連接。換一句話說,如果將KeepAlive設置為On,那麼來自同一客戶端的請求就不需要再一次連接,避免每次請求都要新建一個連接而加重服務器的負擔。
KeepAlive的連接活躍時間當然是受KeepAliveTimeOut限制的。如果第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次連接就會中斷,再新建第二個連接。

所以,一般情況下,圖片較多的網站應該把KeepAlive設為On。但是KeepAliveTimeOut應該設置為多少秒就是一個值得討論的問題了。

如果KeepAliveTimeOut設置的時間過短,例如設置為1秒,那麼APACHE就會頻繁的建立新連接,當然會耗費不少的資源;反過來,如果KeepAliveTimeOut設置的時間過長,例如設置為300秒,那麼APACHE中肯定有很多無用的連接會占用服務器的資源,也不是一件好事。

所以,到底要把KeepAliveTimeOut設置為多少,要看網站的流量、服務器的配置而定。

其實,這和MySql的機制有點相似,KeepAlive相當於mysql_connect或mysql_pconnect,KeepAliveTimeOut相當於wait_timeout。

以下是我的配置: KeepAlive On KeepAliveTimeout 3 考慮到我的網站上有不少的圖片,所以將KeepAlive設為On,一般的頁面兩次請求間隔不會超過3秒,所以這樣設置,至盡運行狀況良好。

參考:http://edu.cnzz.cn/NewsInfo/17275.aspx


好文章:

在 Apache 服務器中,KeepAlive 是一個布爾值,On 代表打開,Off 代表關閉,這個指令在其他眾多的 HTTPD 服務器中都是存在的。

  KeepAlive 配置指令決定當處理完用戶發起的 HTTP 請求後是否立即關閉 TCP 連接,如果 KeepAlive 設置為On,那麼用戶完成一次訪問後,不會立即斷開連接,如果還有請求,那麼會繼續在這一次 TCP 連接中完成,而不用重復建立新的 TCP 連接和關閉TCP 連接,可以提高用戶訪問速度。

  那麼我們考慮3種情況:
  1。用戶浏覽一個網頁時,除了網頁本身外,還引用了多個 javascript 文件,多個 css 文件,多個圖片文件,並且這些文件都在同一個 HTTP 服務器上。
  2。用戶浏覽一個網頁時,除了網頁本身外,還引用一個 javascript 文件,一個圖片文件。
  3。用戶浏覽的是一個動態網頁,由程序即時生成內容,並且不引用其他內容。

  對於上面3中情況,我認為:1 最適合打開 KeepAlive ,2 隨意,3 最適合關閉 KeepAlive

  下面我來分析一下原因。

  在 Apache 中,打開和關閉 KeepAlive 功能,服務器端會有什麼異同呢?

  先看看理論分析。

  打開 KeepAlive 後,意味著每次用戶完成全部訪問後,都要保持一定時間後才關閉會關閉 TCP 連接,那麼在關閉連接之前,必然會有一個Apache 進程對應於該用戶而不能處理其他用戶,假設 KeepAlive 的超時時間為 10 秒種,服務器每秒處理 50個獨立用戶訪問,那麼系統中 Apache 的總進程數就是 10 * 50 = 500 個,如果一個進程占用 4M 內存,那麼總共會消耗 2G內存,所以可以看出,在這種配置中,相當消耗內存,但好處是系統只處理了 50次 TCP 的握手和關閉操作。

  如果關閉 KeepAlive,如果還是每秒50個用戶訪問,如果用戶每次連續的請求數為3個,那麼 Apache 的總進程數就是 50 * 3= 150 個,如果還是每個進程占用 4M 內存,那麼總的內存消耗為 600M,這種配置能節省大量內存,但是,系統處理了 150 次 TCP的握手和關閉的操作,因此又會多消耗一些 CPU 資源。

  在看看實踐的觀察。

  我在一組大量處理動態網頁內容的服務器中,起初打開 KeepAlive功能,經常觀察到用戶訪問量大時Apache進程數也非常多,系統頻繁使用交換內存,系統不穩定,有時負載會出現較大波動。關閉了 KeepAlive功能後,看到明顯的變化是: Apache 的進程數減少了,空閒內存增加了,用於文件系統Cache的內存也增加了,CPU的開銷增加了,但是服務更穩定了,系統負載也比較穩定,很少有負載大范圍波動的情況,負載有一定程度的降低;變化不明顯的是:訪問量較少的時候,系統平均負載沒有明顯變化。


  總結一下:
  在內存非常充足的服務器上,不管是否關閉 KeepAlive 功能,服務器性能不會有明顯變化;
  如果服務器內存較少,或者服務器有非常大量的文件系統訪問時,或者主要處理動態網頁服務,關閉 KeepAlive 後可以節省很多內存,而節省出來的內存用於文件系統Cache,可以提高文件系統訪問的性能,並且系統會更加穩定。


  補充1:
  關於是否應該關閉 KeepAlive 選項,我覺得可以基於下面的一個公式來判斷。

  在理想的網絡連接狀況下,系統的 Apache 進程數和內存使用可以用如下公式表達:
HttpdProcessNumber = KeepAliveTimeout * TotalRequestPerSecond / Average(KeepAliveRequests)
HttpdUsedMemory = HttpdProcessNumber * MemoryPerHttpdProcess

 

  換成中文:
總Apache進程數 = KeepAliveTimeout * 每秒種HTTP請求數 / 平均KeepAlive請求  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved