国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 優(yōu)化推廣 > 正文

Keep Alive 優(yōu)化例子與總結(jié)

2024-04-26 13:56:54
字體:
供稿:網(wǎng)友

看到有人問Connection: close和Connection: keep-alive有什么區(qū)別?想起以前學(xué)習(xí)到的一篇文章,今天轉(zhuǎn)載來,大家看看,我也再溫故知新下。如果有問題補充的在下面可以擴充下。等忙完了,我也再補充些。

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

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

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

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

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

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

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

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

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

二、 總結(jié)

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

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

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

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

三、減少域名解釋的開銷

對于HTTP/1.0來說可以充分利用瀏覽器默認最大并發(fā)連接數(shù)比HTTP/1.1多的好 處,實現(xiàn)不增加新域名的開銷而更高的并行下載,減少域名解釋的開銷(注:IE 6,7在HTTP/1.0中默認最大并發(fā)連接數(shù)為4,在HTTP/1.1中默認最大并發(fā)連接數(shù)為2,IE8都為6,F(xiàn)irefox2在HTTP/1.0中 默認最大并發(fā)連接數(shù)為2 在HTTP/1.1中默認最大并發(fā)連接數(shù)為8,firefox 3默認都是6),根據(jù)10年7月Google索引的42億個網(wǎng)頁的統(tǒng)計報告,每張網(wǎng)頁里包含29.39個圖片,7.09個外部腳本,3.22個外部CSS 樣式表,如果設(shè)置了Keep-Alive并且合理控制Keep-Alive TimeOut這個參數(shù)可以大量的節(jié)約連接的開銷,提高相應(yīng)速度。如果設(shè)置不好,在大并發(fā)的情況小,因維持大量連接而使服務(wù)器資源耗盡,而對于目前國內(nèi)大 部分的用戶使用的還是IE6,7的情況下關(guān)閉Keep-Alive可以充分利用瀏覽器默認最大并發(fā)連接數(shù)的好處實現(xiàn)不增加額外的開銷頁面快速的展示。

來源:seo優(yōu)化網(wǎng) 轉(zhuǎn)載注明出處!

 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 白银市| 高台县| 连平县| 漾濞| 洛浦县| 西安市| 元朗区| 安阳市| 田阳县| 那坡县| 孝昌县| 台山市| 浠水县| 扎兰屯市| 芜湖县| 靖宇县| 屏东县| 驻马店市| 宁国市| 洛南县| 额尔古纳市| 西畴县| 三明市| 苍山县| 吉隆县| 靖边县| 武乡县| 临猗县| 巴彦淖尔市| 五常市| 张北县| 鄂托克前旗| 定州市| 合阳县| 德安县| 米脂县| 施秉县| 西安市| 共和县| 甘肃省| 贵州省|