<code id="6mcsu"></code>
<li id="6mcsu"></li>
<li id="6mcsu"><dl id="6mcsu"></dl></li>
  • <code id="6mcsu"><tr id="6mcsu"></tr></code>
    或者

    Keep Alive 優化例子與總結

    作者:月光邊境 瀏覽:185 發布時間:2017-08-29
    分享 評論 0

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

      一、問題現象: 一個JSP頁面,居然要耗時40多秒。網頁中有大量的圖片的CSS

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

      當然,不是所有的情況都設置KeepAlive為On,下面的文字總結比較好:

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

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

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

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

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

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

      二、 總結

      1、當你的Server內存充足時,KeepAlive =On還是Off對系統性能影響不大。

      2、當你的Server上靜態網頁(Html、圖片、Css、Js)居多時,建議打開KeepAlive 。

      3、當你的Server多為動態請求(因為連接數據庫,對文件系統訪問較多),KeepAlive 關掉,會節省一定的內存,節省的內存正好可以作為文件系統的Cache(vmstat命令中cache一列),降低I/O壓力。

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

      三、減少域名解釋的開銷

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


    免费无码午夜福利片| 成人无码免费一区二区三区| 白嫩少妇激情无码| 无码国内精品久久人妻麻豆按摩| 高潮潮喷奶水飞溅视频无码| 精品久久人妻av中文字幕| 久久青青草原亚洲av无码app| 日韩人妻无码精品无码中文字幕| 一区二区三区无码高清| 成人免费无码H在线观看不卡| 亚洲AV无码专区电影在线观看| 中文字幕精品一区二区日本| 无码人妻一区二区三区在线水卜樱| 亚洲AV无码一区二区三区DV| 乱人伦中文视频高清视频| 人妻无码人妻有码中文字幕| 国产乱子伦精品无码专区| 日韩人妻无码一区二区三区久久 | 日本爆乳j罩杯无码视频| 中文字幕无码一区二区免费 | 东京热加勒比无码少妇| 无码137片内射在线影院| 中文字幕丰满伦子无码| 五月天中文字幕mv在线女婷婷五月 | 精品亚洲综合久久中文字幕 | 超碰97国产欧美中文| 亚洲中文字幕无码不卡电影| 无码日韩人妻AV一区二区三区| yy111111少妇影院里无码| 国产成A人亚洲精V品无码性色| 无码AV波多野结衣久久| 日韩精品无码一区二区三区 | 国产午夜精品无码| 少妇伦子伦精品无码STYLES| 无码少妇一区二区性色AV | 久久久久亚洲AV无码网站| 无码AV岛国片在线播放| 国产AV无码专区亚洲AV男同 | 亚洲无码高清在线观看| 亚洲av麻豆aⅴ无码电影| 少妇人妻综合久久中文字幕|