西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁(yè)編程開(kāi)發(fā)其它知識(shí) → Apache中KeepAlive的含義、作用及配置

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

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/11/25 18:26:18字體大。A-A+

作者:西西點(diǎn)擊:0次評(píng)論:1次標(biāo)簽: Apache

  • 類型:編程工具大小:11.8M語(yǔ)言:中文 評(píng)分:3.9
  • 標(biāo)簽:
立即下載

引子

  先來(lái)分析一個(gè)Yslow 測(cè)試的一個(gè)頁(yè)面的前端性能。

  這里所有的請(qǐng)求是指http請(qǐng)求,對(duì)于一個(gè)請(qǐng)求各個(gè)階段的劃分,阻擋->域名解析->建立連接->發(fā)送請(qǐng)求->等待響應(yīng)->接收數(shù)據(jù)。當(dāng)然不是每個(gè)請(qǐng)求都要包含所有過(guò)程。

  在以上測(cè)試中,沒(méi)有涉及到請(qǐng)求下載資源過(guò)程中還有一個(gè)部分:TCP請(qǐng)求的鏈接與斷開(kāi),而這篇文章正式說(shuō)這個(gè)請(qǐng)求的。 

  那么http請(qǐng)求和tcp請(qǐng)求是什么關(guān)系呢?簡(jiǎn)單點(diǎn)說(shuō)就是一個(gè)tcp請(qǐng)求是比較靠近底層的,在它上面是http之類的應(yīng)用請(qǐng)求,所以可以認(rèn)為一個(gè)tcp請(qǐng)求包括很多個(gè)http請(qǐng)求(至于包括多少,apache中可以設(shè)定),同時(shí)tcp的鏈接與斷開(kāi)比http請(qǐng)求的鏈接和斷開(kāi)更需要消耗掉更多的內(nèi)存資源和時(shí)間。 

KeepAlive的含義                                                                               

  KeepAlive配置的含義:對(duì)于HTTP/1.1的客戶端來(lái)說(shuō),將會(huì)盡量的保持客戶的HTTP連接,通過(guò)一個(gè)連接傳送多份HTTP請(qǐng)求響應(yīng)。這樣對(duì)于客戶端來(lái)說(shuō),可以提高50%左右的響應(yīng)時(shí)間,而于服務(wù)器端來(lái)說(shuō)則降低了更多個(gè)連接的開(kāi)銷。不過(guò)這個(gè)依賴于客戶端是否想保持連接。IE默認(rèn)是保持連接的,當(dāng)你打開(kāi)100個(gè)圖片的網(wǎng)站時(shí),IE有可能只打開(kāi)2個(gè)連接,通過(guò)這兩個(gè)連接傳送數(shù)據(jù),而不是開(kāi)100個(gè)連接。

  在 Apache 服務(wù)器中,KeepAlive 是一個(gè)布爾值,On 代表打開(kāi),Off 代表關(guān)閉,這個(gè)指令在其他眾多的 HTTPD 服務(wù)器中都是存在的。

  KeepAliveTimeout 為持久連接保持的時(shí)間,也就是說(shuō),在這此連接結(jié)束后開(kāi)始計(jì)時(shí),多長(zhǎng)時(shí)間內(nèi)沒(méi)有重新發(fā)送HTTP請(qǐng)求,就斷掉連接。默認(rèn)設(shè)置為5秒,這個(gè)值可以大點(diǎn),但不能太大,否則會(huì)出現(xiàn)同時(shí)等候過(guò)多連接,導(dǎo)致多的內(nèi)存被占用。

KeepAlive的作用                                                                              

如何謀求網(wǎng)絡(luò)帶寬與服務(wù)器資源之間的平衡。這個(gè)要根據(jù)具體情況,具體分析。

那么我們考慮3種情況:
  1。用戶瀏覽一個(gè)網(wǎng)頁(yè)時(shí),除了網(wǎng)頁(yè)本身外,還引用了多個(gè) javascript 文件,多個(gè) css 文件,多個(gè)圖片文件,并且這些文件都在同一個(gè) HTTP 服務(wù)器上。
  2。用戶瀏覽一個(gè)網(wǎng)頁(yè)時(shí),除了網(wǎng)頁(yè)本身外,還引用一個(gè) javascript 文件,一個(gè)圖片文件。
  3。用戶瀏覽的是一個(gè)動(dòng)態(tài)網(wǎng)頁(yè),由程序即時(shí)生成內(nèi)容,并且不引用其他內(nèi)容。

  對(duì)于上面3中情況,我認(rèn)為:1 最適合打開(kāi) KeepAlive ,2 隨意,3 最適合關(guān)閉 KeepAlive

  
  在 Apache 中,打開(kāi)和關(guān)閉 KeepAlive 功能,服務(wù)器端會(huì)有什么異同呢? 下面看理論分析。

  打開(kāi) KeepAlive 后,意味著每次用戶完成全部訪問(wèn)后,都要保持一定時(shí)間后才關(guān)閉會(huì)關(guān)閉 TCP 連接,那么在關(guān)閉連接之前,必然會(huì)有一個(gè)Apache 進(jìn)程對(duì)應(yīng)于該用戶而不能處理其他用戶,假設(shè) KeepAlive 的超時(shí)時(shí)間為 10 秒種,服務(wù)器每秒處理 50個(gè)獨(dú)立用戶訪問(wèn),那么系統(tǒng)中 Apache 的總進(jìn)程數(shù)就是 10 * 50 = 500 個(gè),如果一個(gè)進(jìn)程占用 4M 內(nèi)存,那么總共會(huì)消耗 2G內(nèi)存,所以可以看出,在這種配置中,相當(dāng)消耗內(nèi)存,但好處是系統(tǒng)只處理了 50次 TCP 的握手和關(guān)閉操作。

  如果關(guān)閉 KeepAlive,如果還是每秒50個(gè)用戶訪問(wèn),如果用戶每次連續(xù)的請(qǐng)求數(shù)為3個(gè),那么 Apache 的總進(jìn)程數(shù)就是 50 * 3= 150 個(gè),如果還是每個(gè)進(jìn)程占用 4M 內(nèi)存,那么總的內(nèi)存消耗為 600M,這種配置能節(jié)省大量?jī)?nèi)存,但是,系統(tǒng)處理了 150 次 TCP的握手和關(guān)閉的操作,因此又會(huì)多消耗一些 CPU 資源。

  在看看實(shí)踐的觀察。

  在一組大量處理動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容的服務(wù)器中,起初打開(kāi) KeepAlive功能,經(jīng)常觀察到用戶訪問(wèn)量大時(shí)Apache進(jìn)程數(shù)也非常多,系統(tǒng)頻繁使用交換內(nèi)存,系統(tǒng)不穩(wěn)定,有時(shí)負(fù)載會(huì)出現(xiàn)較大波動(dòng)。關(guān)閉了 KeepAlive功能后,看到明顯的變化是: Apache 的進(jìn)程數(shù)減少了,空閑內(nèi)存增加了,用于文件系統(tǒng)Cache的內(nèi)存也增加了,CPU的開(kāi)銷增加了,但是服務(wù)更穩(wěn)定了,系統(tǒng)負(fù)載也比較穩(wěn)定,很少有負(fù)載大范圍波動(dòng)的情況,負(fù)載有一定程度的降低;變化不明顯的是:訪問(wèn)量較少的時(shí)候,系統(tǒng)平均負(fù)載沒(méi)有明顯變化。

  總結(jié)一下:
  在內(nèi)存非常充足的服務(wù)器上,不管是否關(guān)閉 KeepAlive 功能,服務(wù)器性能不會(huì)有明顯變化;
  如果服務(wù)器內(nèi)存較少,或者服務(wù)器有非常大量的文件系統(tǒng)訪問(wèn)時(shí),或者主要處理動(dòng)態(tài)網(wǎng)頁(yè)服務(wù),關(guān)閉 KeepAlive 后可以節(jié)省很多內(nèi)存,而節(jié)省出來(lái)的內(nèi)存用于文件系統(tǒng)Cache,可以提高文件系統(tǒng)訪問(wèn)的性能,并且系統(tǒng)會(huì)更加穩(wěn)定。 

KeepAlive配置文件                                                                                   

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

...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>

文件的注釋部分已經(jīng)給出了每個(gè)參數(shù)的具體含義,所以這里就沒(méi)必要一一解釋了。

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

      05-15 / 26.0M

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

      08-19 / 139.3M

      推薦理由:JDK是一個(gè)開(kāi)發(fā)環(huán)境,用于構(gòu)建應(yīng)用程序,applet程序,和使用Java編程語(yǔ)言的組成部分。Java Development Kit(
    • Java SE Runtime Environment 89.0

      01-19 / 56.3M

      推薦理由:Java語(yǔ)言恐怕是穩(wěn)居網(wǎng)路應(yīng)用程序語(yǔ)言的首選了,這都要?dú)w功于它高度的安全性以及跨平臺(tái)的特性,幾乎在目前所有
    • JDK 6(Java SE Development Kit)6u

      03-10 / 57.9M

      推薦理由:適用于您的計(jì)算機(jī)(windows)的 Java 軟件,即 Java Runtime Environment,也稱為 Java Runtime、運(yùn)行時(shí)環(huán)境、
    • Java SE Development Kit (JDK7)7u

      08-19 / 137.5M

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

      05-15 / 13.8M

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

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)
    推薦文章

    沒(méi)有數(shù)據(jù)