日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不可忽略的apache 的 Keep Alive

發(fā)布時(shí)間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不可忽略的apache 的 Keep Alive 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載鏈接:http://hi.baidu.com/jx_iben/item/d5fe91feed74495ec9f337f1

在網(wǎng)頁開發(fā)過程中,Keep-Alive是HTTP協(xié)議中非常重要的一個(gè)屬性。大家知道HTTP構(gòu)建在TCP之上。在HTTP早期實(shí)現(xiàn)中,每個(gè)HTTP請(qǐng)求都要打開一個(gè)socket連接。這種做效率很低,因?yàn)橐粋€(gè)Web 頁面中的很多HTTP請(qǐng)求都指向同一個(gè)服務(wù)器。例如,很多為Web頁面中的圖片發(fā)起的請(qǐng)求都指向一個(gè)通用的圖片服務(wù)器。持久連接的引入解決了多對(duì)已請(qǐng)求服務(wù)器導(dǎo)致的socket連接低效性的問題。它使瀏覽器可以再一個(gè)單獨(dú)的連接上進(jìn)行多個(gè)請(qǐng)求。瀏覽器和服務(wù)器使用Connection頭ilai指出對(duì)Keep-Alive的支持。

?

筆者在去年遇到一個(gè)跟Keep-Alive的問題:

?

問題現(xiàn)象: 一個(gè)JSP頁面,居然要耗時(shí)40多秒。網(wǎng)頁中有大量的圖片的CSS

?

問題解決: 原因也找了半天,原來Apache配置里面,把Keep-Alive的開關(guān)關(guān)閉了。這個(gè)是個(gè)大問題,工程師為什么要關(guān)閉它,原來他考慮的太簡(jiǎn)單了,我們知道Apache適合處于短連接的請(qǐng)求,處理時(shí)間越短,并發(fā)數(shù)才能上去,原來他是這么考慮,但是沒有辦法,只能這樣了,還是打開Keep-Alive開關(guān)吧。

?

當(dāng)然,不是所有的情況都設(shè)置KeepAlive為On,下面的文字總結(jié)比較好:

?

【在使用apache的過程中,KeepAlive屬性我一直保持為默認(rèn)值On,其實(shí),該屬性設(shè)置為On還是Off還是要具體問題具體分析的,在生產(chǎn)環(huán)境中的影響還是蠻大的。

KeepAlive選項(xiàng)到底有什么用處?如果你用過Mysql ,應(yīng)該知道Mysql的連接屬性中有一個(gè)與KeepAlive 類似的Persistent Connection,即:長(zhǎng)連接(PConnect)。該屬性打開的話,可以使一次TCP連接為同一用戶的多次請(qǐng)求服務(wù),提高了響應(yīng)速度。

比如很多網(wǎng)頁中圖片、CSS、JS、Html都在一臺(tái)Server上,當(dāng)用戶訪問其中的Html網(wǎng)頁時(shí),網(wǎng)頁中的圖片、Css、Js都構(gòu)成了訪問請(qǐng)求,打開KeepAlive 屬性可以有效地降低TCP握手的次數(shù)(當(dāng)然瀏覽器對(duì)同一域下同時(shí)請(qǐng)求的圖片數(shù)有限制,一般是2),減少httpd進(jìn)程數(shù),從而降低內(nèi)存的使用(假定prefork模式)。MaxKeepAliveRequests 和KeepAliveTimeOut 兩個(gè)屬性在KeepAlive =On時(shí)起作用,可以控制持久連接的生存時(shí)間和最大服務(wù)請(qǐng)求數(shù)。

不過,上面說的只是一種情形,那就是靜態(tài)網(wǎng)頁居多的情況下,并且網(wǎng)頁中的其他請(qǐng)求與網(wǎng)頁在同一臺(tái)Server上。當(dāng)你的應(yīng)用動(dòng)態(tài)程序(比如:php )居多,用戶訪問時(shí)由動(dòng)態(tài)程序即時(shí)生成html內(nèi)容,html內(nèi)容中圖片素材和Css、Js等比較少或者散列在其他Server上時(shí),KeepAlive =On反而會(huì)降低Apache 的性能。為什么呢?

前面提到過,KeepAlive =On時(shí),每次用戶訪問,打開一個(gè)TCP連接,Apache 都會(huì)保持該連接一段時(shí)間,以便該連接能連續(xù)為同一client服務(wù),在KeepAliveTimeOut還沒到期并且MaxKeepAliveRequests還沒到閾值之前,Apache 必然要有一個(gè)httpd進(jìn)程來維持該連接,httpd進(jìn)程不是廉價(jià)的,他要消耗內(nèi)存和CPU時(shí)間片的。假如當(dāng)前Apache 每秒響應(yīng)100個(gè)用戶訪問,KeepAliveTimeOut=5,此時(shí)httpd進(jìn)程數(shù)就是100*5=500個(gè)(prefork 模式),一個(gè)httpd進(jìn)程消耗5M內(nèi)存的話,就是500*5M=2500M=2.5G,夸張吧?當(dāng)然,Apache 與Client只進(jìn)行了100次TCP連接。如果你的內(nèi)存夠大,系統(tǒng)負(fù)載不會(huì)太高,如果你的內(nèi)存小于2.5G,就會(huì)用到Swap,頻繁的Swap切換會(huì)加重CPU的Load。

現(xiàn)在我們關(guān)掉KeepAliveApache 仍然每秒響應(yīng)100個(gè)用戶訪問,因?yàn)槲覀儗D片、js、css等分離出去了,每次訪問只有1個(gè)request,此時(shí)httpd的進(jìn)程數(shù)是100*1=100個(gè),使用內(nèi)存100*5M=500M,此時(shí)Apache 與Client也是進(jìn)行了100次TCP連接。性能卻提升了太多。

總結(jié):

1、當(dāng)你的Server內(nèi)存充足時(shí),KeepAlive =On還是Off對(duì)系統(tǒng)性能影響不大。

2、當(dāng)你的Server上靜態(tài)網(wǎng)頁(Html、圖片、Css、Js)居多時(shí),建議打開KeepAlive

3、當(dāng)你的Server多為動(dòng)態(tài)請(qǐng)求(因?yàn)檫B接數(shù)據(jù)庫,對(duì)文件系統(tǒng)訪問較多),KeepAlive 關(guān)掉,會(huì)節(jié)省一定的內(nèi)存,節(jié)省的內(nèi)存正好可以作為文件系統(tǒng)的Cache(vmstat命令中cache一列),降低I/O壓力。

PS:當(dāng)KeepAlive =On時(shí),KeepAliveTimeOut的設(shè)置其實(shí)也是一個(gè)問題,設(shè)置的過短,會(huì)導(dǎo)致Apache 頻繁建立連接,給Cpu造成壓力,設(shè)置的過長(zhǎng),系統(tǒng)中就會(huì)堆積無用的Http連接,消耗掉大量?jī)?nèi)存,具體設(shè)置多少,可以進(jìn)行不斷的調(diào)節(jié),因你的網(wǎng)站瀏覽和服務(wù)器配置 而異


總結(jié)

以上是生活随笔為你收集整理的不可忽略的apache 的 Keep Alive的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。