Apache中KeepAlive配置的合理使用good
在 Apache 服務器中,KeepAlive 是一個布爾值,On 代表打開,Off 代表關閉,這個指令在其他眾多的 HTTPD 服務器中都是存在的。
KeepAlive 配置指令決定當處理完用戶發起的 HTTP 請求后是否立即關閉 TCP 連接,如果 KeepAlive 設置為 On,那么用戶完成一次訪問后,不會立即斷開連接,如果還有請求,那么會繼續在這一次 TCP 連接中完成,而不用重復建立新的 TCP 連接和關閉 TCP 連接,可以提高用戶訪問速度。
那么我們考慮3種情況:
1。用戶瀏覽一個網頁時,除了網頁本身外,還引用了多個 java 文件,多個 css 文件,多個圖片文件,并且這些文件都在同一個 HTTP 服務器上。
2。用戶瀏覽一個網頁時,除了網頁本身外,還引用一個 java 文件,一個圖片文件。
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 選項,我覺得可以基于下面的一個公式來判斷。
在理想的網絡連接狀況下,系統的 Apache 進程數和內存使用可以用如下公式表達:
HttpdProcessNumber = KeepAliveTimeout * TotalRequestPerSecond / Average(KeepAliveRequests)
HttpdUsedMemory = HttpdProcessNumber * MemoryPerHttpdProcess
換成中文:
總Apache進程數 = KeepAliveTimeout * 每秒種HTTP請求數 / 平均KeepAlive請求
Apache占用內存 = 總Apache進程數 * 平均每進程占用內存數
需要特別說明的是:
[平 均KeepAlive請求] 數,是指每個用戶連接上服務器后,持續發出的 HTTP 請求數。當 KeepAliveTimeout 等 0 或者 KeepAlive 關閉時,KeepAliveTimeout 不參與乘的運算從上面的公式看,如果 [每秒用戶請求] 多,[KeepAliveTimeout] 的值大,[平均KeepAlive請求] 的值小,都會造成 [Apache進程數] 多和 [內存] 多,但是當 [平均KeepAlive請求] 的值越大時,[Apache進程數] 和 [內存] 都是趨向于減少的。
基于上面的公式,我們就可以推算出當 平均KeepAlive請求 <= KeepAliveTimeout 時,關閉 KeepAlive 選項是劃算的,否則就可以考慮打開。
關鍵字:Apache KeepAlive 配置 合理 使用 good
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解