• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件下載最安全的下載網站、值得信賴的軟件下載站!

    首頁編程開發其它知識 → Apache中KeepAlive的含義、作用及配置

    Apache中KeepAlive的含義、作用及配置

    相關軟件相關文章發表評論 來源:西西整理時間:2012/11/25 18:26:18字體大?。?em class="fontsize">A-A+

    作者:西西點擊:0次評論:1次標簽: Apache

    • 類型:編程工具大?。?i>11.8M語言:中文 評分:3.9
    • 標簽:
    立即下載

    引子

      先來分析一個Yslow 測試的一個頁面的前端性能。

      這里所有的請求是指http請求,對于一個請求各個階段的劃分,阻擋->域名解析->建立連接->發送請求->等待響應->接收數據。當然不是每個請求都要包含所有過程。

      在以上測試中,沒有涉及到請求下載資源過程中還有一個部分:TCP請求的鏈接與斷開,而這篇文章正式說這個請求的。 

      那么http請求和tcp請求是什么關系呢?簡單點說就是一個tcp請求是比較靠近底層的,在它上面是http之類的應用請求,所以可以認為一個tcp請求包括很多個http請求(至于包括多少,apache中可以設定),同時tcp的鏈接與斷開比http請求的鏈接和斷開更需要消耗掉更多的內存資源和時間。 

    KeepAlive的含義                                                                               

      KeepAlive配置的含義:對于HTTP/1.1的客戶端來說,將會盡量的保持客戶的HTTP連接,通過一個連接傳送多份HTTP請求響應。這樣對于客戶端來說,可以提高50%左右的響應時間,而于服務器端來說則降低了更多個連接的開銷。不過這個依賴于客戶端是否想保持連接。IE默認是保持連接的,當你打開100個圖片的網站時,IE有可能只打開2個連接,通過這兩個連接傳送數據,而不是開100個連接。

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

      KeepAliveTimeout 為持久連接保持的時間,也就是說,在這此連接結束后開始計時,多長時間內沒有重新發送HTTP請求,就斷掉連接。默認設置為5秒,這個值可以大點,但不能太大,否則會出現同時等候過多連接,導致多的內存被占用。

    KeepAlive的作用                                                                              

    如何謀求網絡帶寬與服務器資源之間的平衡。這個要根據具體情況,具體分析。

    那么我們考慮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,可以提高文件系統訪問的性能,并且系統會更加穩定。 

    KeepAlive配置文件                                                                                   

      如果設置KeepAlive ,找到這個設置的文件頗為費時,以前版本的大多配置都在httpd.conf文件,現在版本(2.4.2)的apache把不少配置都分離到不同的文件中了,于是,我只好一個文件一個文件的搜索。

    ...apache/conf/extra/httpd-default.conf

    #
    # This configuration file reflects default settings for Apache HTTP Server.
    #
    # You may change these, but chances are that you may not need to.
    ##
    # Timeout: The number of seconds before receives and sends time out.
    #
    Timeout 60
    #
    # KeepAlive: Whether or not to allow persistent connections (more than
    # one request per connection). Set to "Off" to deactivate.
    #
    KeepAlive On
    #
    # MaxKeepAliveRequests: The maximum number of requests to allow
    # during a persistent connection. Set to 0 to allow an unlimited amount.
    # We recommend you leave this number high, for maximum performance.
    #
    MaxKeepAliveRequests 100
    #
    # KeepAliveTimeout: Number of seconds to wait for the next request from the
    # same client on the same connection.
    #
    KeepAliveTimeout 5
    ## UseCanonicalName: Determines how Apache constructs self-referencing
    # URLs and the SERVER_NAME and SERVER_PORT variables.
    # When set "Off", Apache will use the Hostname and Port supplied
    # by the client.  When set "On", Apache will use the value of the
    # ServerName directive.
    #
    UseCanonicalName Off
    #
    # AccessFileName: The name of the file to look for in each directory
    # for additional configuration directives.  See also the AllowOverride
    # directive.
    #
    AccessFileName .htaccess
    #
    # ServerTokens
    # This directive configures what you return as the Server HTTP response
    # Header. The default is 'Full' which sends information about the OS-Type
    # and compiled in modules.
    # Set to one of:  Full | OS | Minor | Minimal | Major | Prod
    # where Full conveys the most information, and Prod the least.
    #
    ServerTokens Full
    #
    # Optionally add a line containing the server version and virtual host
    # name to server-generated pages (internal error documents, FTP directory
    # listings, mod_status and mod_info output etc., but not CGI generated
    # documents or custom error documents).
    # Set to "EMail" to also include a mailto: link to the ServerAdmin.
    # Set to one of:  On | Off | EMail
    #
    ServerSignature Off
    #
    # HostnameLookuPS: Log the names of clients or just their IP addresses
    # e.g., www.apache.org (on) or 204.62.129.132 (off).
    # The default is off because it'd be overall better for the net if people
    # had to knowingly turn this feature on, since enabling it means that
    # each client request will result in AT LEAST one lookup request to the
    # nameserver.
    #
    HostnameLookups Off
    #
    # Set a timeout for how long the client may take to send the request header
    # and body.
    # The default for the headers is header=20-40,MinRate=500, which means wait
    # for the first byte of headers for 20 seconds. If some data arrives,
    # increase the timeout corresponding to a data rate of 500 bytes/s, but not
    # above 40 seconds.
    # The default for the request body is body=20,MinRate=500, which is the same
    # but has no upper limit for the timeout.
    # To disable, set to header=0 body=0
    #
    <IfModule reqtimeout_module>
      RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
    </IfModule>

    文件的注釋部分已經給出了每個參數的具體含義,所以這里就沒必要一一解釋了。

      jre下載
      (45)jre下載
      是程序的運行環境,如果你想想編寫程序那就要裝,是整個的核心,包括了運行環境工具和基礎類庫。語言由于它的跨平臺性,經常是編程語言排行榜的榜首,年月份編程語言排行榜,本月變化較大的是與位置互換,領銜稱霸,份額略有上升。前三甲為。當然,如果你只是想在上運行程序,那么裝上環境就了。,,文件怎么運行如果是完整的可執行文件,那么是可以雙擊運行的,前提,你的機器上一定有合適的版本裝過后文件會被關聯到用.打開,,直接...更多>>
      • Java Runtime Environment(JRE7)V7

        05-15 / 26.0M

        推薦理由:java 運行庫 runtime environment 7,安裝了它就可以運行java的程序了。Java語言恐怕是穩居網路應用程序語言
      • jdk7 64位7u80 官方正式版(Java SE

        08-19 / 139.3M

        推薦理由:JDK是一個開發環境,用于構建應用程序,applet程序,和使用Java編程語言的組成部分。Java Development Kit(
      • Java SE Runtime Environment 89.0

        01-19 / 56.3M

        推薦理由:Java語言恐怕是穩居網路應用程序語言的首選了,這都要歸功于它高度的安全性以及跨平臺的特性,幾乎在目前所有
      • JDK 6(Java SE Development Kit)6u

        03-10 / 57.9M

        推薦理由:適用于您的計算機(windows)的 Java 軟件,即 Java Runtime Environment,也稱為 Java Runtime、運行時環境、
      • Java SE Development Kit (JDK7)7u

        08-19 / 137.5M

        推薦理由:JDK 7u51 發布,該版本修復了瀏覽器插件的嚴重的安全漏洞:CVE-2013-1493,Oracle 強烈建議使用 Java 瀏覽器
      • JRE(Java Runtime Environment)v6.

        05-15 / 13.8M

        推薦理由:JAVA運行必不可少的運行環境,你只要運行JAVA,必須安裝JRE,目前還沒有別的運行平臺可以代替了,它包括Jav
      JAVA軟件
      (60)JAVA軟件
      軟件下載,編程軟件下載專題有多款適合編程愛好者學習使用的軟件,我們提供了適用于開發者使用的相關軟件的各個版本跟新的下載地址,以方便各位愛好者使用學習。如果您有什么好的編程軟件可以向我們提供分享下載,如果下載的軟件有什么問題也可以向我們提供建議,祝程序員們學習愉快軟件開發其實可以不用其他軟件的。只需要安裝了工具包即可,這個是必須的。并且一定要配置好系統的環境變量。這個可以到網上去查,網上很多。然后進...更多>>

      相關評論

      閱讀本文后您有什么感想? 已有人給出評價!

      • 8 喜歡喜歡
      • 3 頂
      • 1 難過難過
      • 5 囧
      • 3 圍觀圍觀
      • 2 無聊無聊

      熱門評論

      最新評論

      發表評論 查看所有評論(1)

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)
      推薦文章

      沒有數據

      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>