① WEB伺服器的優化方法簡介
WEB伺服器的優化方法簡介
在對Web伺服器進行優化時要根據真實的Web應用系統的情況和特徵來採取有針對性地優化方案。首先根據不同的網路特性來看:在區域網中,降低M T U (最大傳輸單位)值對可以避免復制數據和求校驗,而通過優化select系統調用或在Socket事件處理器中執行計算可以優化請求並發管理,利用HTTP1.1持續連接等都可以使系統性能得到相應的改善,但在廣域網的環境下卻沒有什麼大的作用,有的甚至恰恰相反。
例如:減少用戶連接的MTU會增加伺服器處理開銷,採用網路延遲、帶寬限制和使用HTTP1.1的持續連接在廣域網中不會對伺服器性能有什麼大的影響。在廣域網中,終端用戶的請求的等待時間依賴於與網路延遲的程度,連接帶寬限制情況。對於廣域網,軟硬中斷在網路處理中佔有很大的分量,所以採用適應的中斷處理機制將會給伺服器的響應能力帶來很大的`好處;將伺服器定位在內核和將基於進程設計改為基於事務處理也可以不同程度的提高伺服器的性能。
關於Web負載,除了對Web負載的特徵進行分析以便在評測時更好地再現真實負載之外,還要考慮Web伺服器所在的網路環境下負載的情況。人們不僅要求伺服器滿足正常的工作負載要求,而且在高峰時期依然要保持較高的吞吐量。但是,伺服器在高負載的情況下的性能表現往往低於人們的期望。
伺服器過載的情況分為兩種:一種為瞬間過載,即伺服器暫時的、短時間的超載,這種情況主要是由慎乎畢伺服器負載的特點引起的。大量的研究表明,Web請求的網路通信量分布是自相似的,即Web請求的通信量可以在很大范圍內有顯著的變化。這就造成伺服器常常短時間的超載,但頃橋這樣情況持續的時間一般很短。一種是伺服器長時間的超載,這種情況一般是由某一特殊事件引起的,例如伺服器受到拒絕服務攻擊或者發生了「活鎖現象。
第一種伺服器超載情況是不可避免的,但第二種情況則可以通過對伺服器改進來改善。拋開惡意的攻擊不算,仔細分析伺服器處理信息寬芹包的過程可以發現,造成系統在超載情況下性能下降的根本原因是高優先順序處理階段對CPU的不公平搶占。
因此,如果限制高優先順序處理階段對CPU的佔用率,或者限制處理高優先順序的CPU個數,都可以減輕或者消除收包活鎖現象。具體的可以採用以下的方法:
一、採用輪詢機制。為了減少中斷對系統性能的影響,在負載正常的情況下採用「下半處理 的方法就非常有效,而在高負荷情況下,採用這個方法仍然會造成活鎖現象,這時可以採用輪詢機制。雖然這個方法在負載正常的情況下會造成資源的浪費和響應速度降低,但在網路數據頻繁到達伺服器時就要比中斷驅動技術有效的多。
二、減少上下文切換。這種方法不管伺服器在什麼情況下對性能改善都很有效,這時可以採用引入核心級(kerne1—leve1)或硬體級數據流的方法來達到這個目的。核心級數據流是將數據從源通過系統匯流排進行轉發而不需要使數據經過應用程序進程,這個過程中因為數據在內存中,因此需要CPU操作數據。
硬體級數據流則是將數據從源通過私有數據匯流排或是雖等DMA通過系統匯流排進行轉發而不需要使數據經過應用程序進程,這個過程不需要CPU操作數據。這樣在數據傳輸過程中不需要用戶線程的介入,減少了數據被拷貝的次數,減少了上下文切換的開銷。
三、減低中斷的頻率(主要是針對高負荷情況的方法)。這里主要有兩種方法:批中斷和暫時關閉中斷。批中斷可以在超載時有效的抑制活鎖現象,但對伺服器的性能沒有什麼根本性的改進;當系統出現接收活鎖跡象時,可以採用暫時關閉中斷的方法來緩和系統的負擔,當系統緩存再次可用時可以再打開中斷,但這種方法在接收緩存不夠大的情況下會造成數據包丟失。
Web伺服器性能是整個Web系統的關鍵環節,提高Web伺服器的性能也是長久以來人們一直關注的課題。這里通過對Web伺服器的工作原理和現有的優化方法和技術的分析,得出了對待Web伺服器性能的提高也應該具體問題具體分析,要在具體的應用環境中,根據其特點來採取相應的優化措施。 ;
② 如何配置Web伺服器實現負載均衡
網路的負載均衡是一種動態均衡技術,通過一些工具實時地分析數據包,掌握網路中的數據流量狀況,把任務合理均衡地分配出去。這種技術基於現有網路結構,提供了一種擴展伺服器帶寬和增加伺服器吞吐量的廉價有效的方法,加強了網路數據處理能力,提高了網路的靈活性和可用性。
以四台伺服器為例實現負載均衡:
安裝配置LVS
1. 安裝前准備:
(1)首先說明,LVS並不要求集群中的伺服器規格劃一,相反,可以根據伺服器的不同配置和負載狀況,調整負載分配策略,充分利用集群環境中的每一台伺服器。如下表:
Srv Eth0 Eth0:0 Eth1 Eth1:0
vs1 10.0.0.1 10.0.0.2 192.168.10.1 192.168.10.254
vsbak 10.0.0.3 192.168.10.102
real1 192.168.10.100
real2 192.168.10.101
其中,10.0.0.2是允許用戶訪問的IP。
(2)這4台伺服器中,vs1作為虛擬伺服器(即負載平衡伺服器),負責將用戶的訪問請求轉發到集群內部的real1,real2,然後由real1,real2分別處理。
Client為客戶端測試機器,可以為任意操作系統。
(3)所有OS為redhat6.2,其中vs1 和vsbak 的核心是2.2.19, 而且patch過ipvs的包, 所有real
server的Subnet mask 都是24位, vs1和vsbak 的10.0.0. 網段是24 位。
2.理解LVS中的相關術語
(1) ipvsadm :ipvsadm是LVS的一個用戶界面。在負載均衡器上編譯、安裝ipvsadm。
(2) 調度演算法: LVS的負載均衡器有以下幾種調度規則:Round-robin,簡稱rr;weighted
Round-robin,簡稱wrr;每個新的連接被輪流指派到每個物理伺服器。Least-connected,簡稱lc;weighted
Least-connected,簡稱wlc,每個新的連接被分配到負擔最小的伺服器。
(3) Persistent client
connection,簡稱pcc,(持續的客戶端連接,內核2.2.10版以後才支持)。所有來自同一個IP的客戶端將一直連接到同一個物理伺服器。超時時間被設置為360秒。Pcc是為https和cookie服務設置的。在這處調度規則下,第一次連接後,所有以後來自相同客戶端的連接(包括來自其它埠)將會發送到相同的物理伺服器。但這也會帶來一個問題,因為大約有25%的Internet
可能具有相同的IP地址。
(4) Persistent port
connection調度演算法:在內核2.2.12版以後,pcc功能已從一個調度演算法(你可以選擇不同的調度演算法:rr、wrr、lc、wlc、pcc)演變成為了一個開關選項(你可以讓rr、
wrr、lc、wlc具備pcc的屬性)。在設置時,如果你沒有選擇調度演算法時,ipvsadm將默認為wlc演算法。 在Persistent port
connection(ppc)演算法下,連接的指派是基於埠的,例如,來自相同終端的80埠與443埠的請求,將被分配到不同的物理伺服器上。不幸的是,如果你需要在的網站上採用cookies時將出問題,因為http是使用80埠,然而cookies需要使用443埠,這種方法下,很可能會出現cookies不正常的情況。
(5)Load Node Feature of linux Director:讓Load balancer 也可以處理users 請求。
(6)IPVS connection synchronization。
(7)ARP Problem of LVS/TUN and LVS/DR:這個問題只在LVS/DR,LVS/TUN 時存在。
3. 配置實例
(1) 需要的軟體包和包的安裝:
I. piranha-gui-0.4.12-2*.rpm (GUI介面cluster設定工具);
II. piranha-0.4.12-2*.rpm;
III. ipchains-1.3.9-6lp*.rpm (架設NAT)。
取得套件或mount到光碟,進入RPMS目錄進行安裝:
# rpm -Uvh piranha*
# rpm -Uvh ipchains*
(2) real server群:
真正提供服務的server(如web
server),在NAT形式下是以內部虛擬網域的形式,設定如同一般虛擬網域中Client端使用網域:192.168.10.0/24
架設方式同一般使用虛擬IP之區域網絡。
a. 設網卡IP
real1 :192.168.10.100/24
real2 :192.168.10.101/24
b.每台server均將default gateway指向192.168.10.254。
192.168.10.254為該網域唯一對外之信道,設定在virtual server上,使該網域進出均需通過virtual server 。
c.每台server均開啟httpd功能供web server服務,可以在各real server上放置不同內容之網頁,可由瀏覽器觀察其對各real
server讀取網頁的情形。
d.每台server都開啟rstatd、sshd、rwalld、ruser、rsh、rsync,並且從Vserver上面拿到相同的lvs.conf文件。
(3) virtual server:
作用在導引封包的對外主機,專職負責封包的轉送,不提供服務,但因為在NAT型式下必須對進出封包進行改寫,所以負擔亦重。
a.IP設置:
對外eth0:IP:10.0.0.1 eth0:0 :10.0.0.2
對內eth1:192.168.10.1 eth1:0 :192.168.10.254
NAT形式下僅virtual server有真實IP,real server群則為透過virtual server.
b.設定NAT功能
# echo 1 >; /proc/sys/net/ipv4/ip_forward
# echo 1 >; /proc/sys/net/ipv4/ip_always_defrag
# ipchains -P forward MASQ
c.設定piranha 進入X-window中 (也可以直接編輯/etc/lvs.cf )
a).執行面板系統piranha
b).設定「整體配置」(Global Settings) 主LVS伺服器主機IP:10.0.0.2, 選定網路地址翻譯(預設) NAT路徑名稱:
192.168.10.254, NAT 路徑裝置: eth1:0
c).設定虛擬伺服器(Virtual Servers) 添加編輯虛擬伺服器部分:(Virtual
Server)名稱:(任意取名);應用:http;協議: tcp;連接:80;地址:10.0..0.2;裝置:eth0:0; 重入時間:180
(預設);服務延時:10 (預設);載入監控工具:ruptime (預設);調度策略:Weighted least-connections; 持續性:0
(預設); 持續性屏蔽: 255.255.255.255 (預設); 按下激活:實時伺服器部分:(Real Servers); 添加編輯:名字:(任意取名);
地址: 192.168.10.100; 權重:1 (預設) 按下激活
另一架real server同上,地址:192.168.10.101。
d). 控制/監控(Controls/Monitoring)
控制:piranha功能的激活與停止,上述內容設定完成後即可按開始鍵激活piranha.監控器:顯示ipvsadm設定之routing table內容
可立即更新或定時更新。
(4)備援主機的設定(HA)
單一virtual server的cluster架構virtual server 負擔較大,提供另一主機擔任備援,可避免virtual
server的故障而使對外服務工作終止;備份主機隨時處於預備狀態與virtual server相互偵測
a.備份主機:
eth0: IP 10.0.0.3
eth1: IP 192.168.10.102 同樣需安裝piranha,ipvsadm,ipchains等套件
b.開啟NAT功能(同上面所述)。
c.在virtual server(10.0.0.2)主機上設定。
a).執行piranha冗餘度 ;
b).按下「激活冗餘度」;
冗餘LVS伺服器IP: 10.0.0.3;HEARTBEAT間隔(秒數): 2 (預設)
假定在…秒後進入DEAD狀態: 5 (預設);HEARTBEAT連接埠: 539 (預設)
c).按下「套用」;
d).至「控制/監控」頁,按下「在當前執行層添加PULSE DEAMON」 ,按下「開始」;
e).在監控器按下「自動更新」,這樣可由窗口中看到ipvsadm所設定的routing table,並且動態顯示real
server聯機情形,若real server故障,該主機亦會從監視窗口中消失。
d.激活備份主機之pulse daemon (執行# /etc/rc.d/init.d/pulse start)。
至此,HA功能已經激活,備份主機及virtual server由pulse daemon定時相互探詢,一但virtual
server故障,備份主機立刻激活代替;至virtual server 正常上線後隨即將工作交還virtual server。
LVS測試
經過了上面的配置步驟,現在可以測試LVS了,步驟如下:
1. 分別在vs1,real1,real2上運行/etc/lvs/rc.lvs_dr。注意,real1,real2上面的/etc/lvs
目錄是vs2輸出的。如果您的NFS配置沒有成功,也可以把vs1上/etc/lvs/rc.lvs_dr復制到real1,real2上,然後分別運行。確保real1,real2上面的apache已經啟動並且允許telnet。
2. 測試Telnet:從client運行telnet 10.0.0.2,
如果登錄後看到如下輸出就說明集群已經開始工作了:(假設以guest用戶身份登錄)
[guest@real1 guest]$——說明已經登錄到伺服器real1上。
再開啟一個telnet窗口,登錄後會發現系統提示變為:
[guest@real2 guest]$——說明已經登錄到伺服器real2上。
3. 測試http:從client運行iexplore http://10.0.0.2
因為在real1 和real2 上面的測試頁不同,所以登錄幾次之後,顯示出的頁面也會有所不同,這樣說明real server 已經在正常工作了。
③ 如何配置Web伺服器實現負載均衡
這篇實用文章介紹如何將pfSense 2.0配置成你那些Web伺服器的負載均衡器。這篇實用文章假設你已經安裝了一個pfSense設備和至少兩台Apache伺服器,並且運行在你的網路上;還假設你具備了pfSense方面的一些知識。
要求
一台設備用於安裝pfSense 2.0(如果這是你的邊緣防火牆,我會建議物理機器)。
至少兩台Apache2伺服器(這些可以是虛擬伺服器)。
對Apache伺服器進行了配置,以便以某種方式同步Web文件(rsync/corosync或通過Web伺服器維持文件版本最新的另一個選項)。
配置pfSense
pfSense使用負載均衡器,將某些類型的流量帶來的負載分攤到多台伺服器上;如果你有多台伺服器用於託管運行應用程序,這很好;你可以將負載分攤到所有伺服器上,而不是把負載全扔給一台伺服器、導致不堪重負。
可以入手了,先點擊「Services」(服務),然後點擊「Load Balancers」(負載均衡器),然後點擊「Monitor」(監視器)選項卡。
要添加一個新條目,點擊「Plus」(添加)按鈕,指槐皮定「Name」(名稱)和「Description」(描述,在這個示例中,我會使用ApacheClusterMon作為名稱和描述),將類型設成「HTTP」,然後為「Host」(主機)設置一個未使用的IP地址(我們隨後會創建虛擬伺服器的IP,以便分配給故障切換伺服器組),任由「HTTP Code」(HTTP代碼)設成「200 OK」。需要的話,然後點擊「Save」(保存),使更改生效。
現在我們要創建伺服器池。點擊「Pools」(伺服器池)選項卡,點擊「Plus」(添加)按鈕,即可添加新的伺服器池。
指定一個名稱(ApacheSrvPool將用在我的示例中)。將「Mode」(模式)設成「Load Balance」(負載均衡),然後將「Port」(埠)設成「80」(你可以讓pfSense對其他埠上的其他應用程序實現負載均衡),將「Monitor」(監視器)設成你之前創建的監視器配置,並且指定你希望在伺服器池中的所有Web伺服器的IP地址,需要的話,點擊「Save」(保存),使更改生效。
接下來鉛胡差點擊「Virtual Servers」(虛擬伺服器)選項卡,點擊「Plus」(添加)按鈕,添加一個新條目。指定「Name」(名稱)和「Description」(描述),然後用你之前選擇的未使用IP地址來設置「IP Address」(IP地址),將「Port」(埠)設成「80」,然後將「Virtual Server Pool」(虛擬伺服器池)設成你之前創建的伺服器池,點擊做信「Submit」(提交),使更改生效。
就這樣,你剛配置好了pfSense,對你的Web伺服器之間的網路流量實現負載均衡。
順便提一下,如果任何一台伺服器沒有給出200 OK狀態這樣的回應(pfSense定期向你的Web伺服器發送請求,以確定它們是否正常運行),伺服器池就會處於離線停運狀態。要避免出現停運,最好的辦法就是配置故障切換系統(下一篇文章會有介紹)。
④ 企業級Web伺服器安全該怎麼做主動出擊!
不但企業的門戶網站被篡改、資料被竊取,而且還成為了病毒與木馬的傳播者。有些Web管理員採取了一些措施,雖然可以保證門戶網站的主頁不被篡改,但是卻很難避免自己的網站被當作肉雞,來傳播病毒、惡意插件、木馬等等。筆者認為,這很大一部分原因是管理員在Web安全防護上太被動。他們只是被動的防禦。為了徹底提高Web伺服器的安全,筆者認為,Web安全要主動出擊。具體的來說,需要做到如下幾點。
一、在代碼編寫時就要進行漏洞測試
現在的企業網站做的越來越復雜、功能越來越強。不過這些都不是憑空而來的,是通過代碼堆積起來的。如果這個代碼只供企業內部使用,那麼不會帶來多大的安全隱患。但是如果放在互聯網上使用的話,則這些為實現特定功能的代碼就有可能成為攻擊者的目標。筆者舉一個簡單的例子。在網頁中可以嵌入SQL代碼。而攻擊者就可以利用這些SQL代碼來發動攻擊,來獲取管理員的密碼等等破壞性的動作。有時候訪問某些網站還需要有某些特定的控制項。用戶在安裝這些控制項時,其實就有可能在安裝一個木馬(這可能訪問者與被訪問者都沒有意識到)。
為此在為網站某個特定功能編寫代碼時,就要主動出擊。從編碼的設計到編寫、到測試,都需要認識到是否存在著安全的漏洞。筆者在日常過程中,在這方面對於員工提出了很高的要求。各個員工必須對自己所開發的功能負責。至少現在已知的病毒、木馬不能夠在你所開發的插件中有機可乘。通過這層層把關,就可以提高代碼編寫的安全性。
二、對Web伺服器進行持續的監控
冰凍三尺、非一日之寒。這就好像人生病一樣,都有一個過程。病毒、木馬等等在攻擊Web伺服器時,也需要一個過程。或者說,在攻擊取得成功之前,他們會有一些試探性的動作。如對於一個採取了一定安全措施的Web伺服器,從攻擊開始到取得成果,至少要有半天的時間。如果Web管理員對伺服器進行了全天候的監控。在談基發現有異常行為時,及早的採取措施,將病毒與木馬阻擋在門戶之外。這種主動出擊的方式,就可以大大的提高Web伺服器的安全性。
筆者現在維護的Web伺服器有好幾十個。現在專門有一個小組,來全天候的監控伺服器的訪問。平均每分鍾都可以監測到一些試探性的攻擊行為。其中99%以上的攻擊行為,由於伺服器已經採取了對應的安全措施,都無功而返。不過每天仍然會遇到一些攻擊行為。這些攻擊行為可能是針對新的漏洞,或者採取了新的攻擊方式。在伺服器上原先沒有採取對應的安全措施。如果沒有及時的發現這種行為,那麼他們就很有可能最終實現他們的非法目的。相反,現在及早的發現了他們的攻擊手段,那麼我們就可以在他們採取進一步行動之前,就在伺服器上關掉這扇門,補上這個漏洞。
筆者在這里也建議,企業用戶在選擇互聯網Web伺服器提供商的時候,除了考慮性能等因素之外,還要評估服務提供商能否提供全天候的監控機制。在Web安全上主動出擊,及時發現攻擊者的攻擊行為。在他們採取進一步攻擊措施之前,就他們消除在萌芽狀態。
三、設置蜜罐,將攻擊者引向錯誤的方向
在軍隊中,有時候會給軍人一些「偽裝」,讓敵人分不清真偽。其實在跟病毒、木馬打交道時,本身就是一場無硝煙的戰爭。為此對於Web伺服器採取一些偽裝,也能夠將攻擊者引向錯誤的方向。等到供給者發現自己的目標錯誤時,管理員已經鎖定了攻擊者,從而可以及早的採取相應的措施。筆者有時候將這種主動出擊的行為叫做蜜罐效應。簡單的說,就是設置兩個伺服器。其中一個是真正的伺服器,另外一個是蜜罐。現在需要擾漏做的是,如何將真正的伺服器偽裝起來,含李謹而將蜜罐推向公眾。讓攻擊者認為蜜罐伺服器才是真正的伺服器。要做到這一點的話,可能需要從如下幾個方面出發。
一是有真有假,難以區分。如果要瞞過攻擊者的眼睛,那麼蜜罐伺服器就不能夠做的太假。筆者在做蜜罐伺服器的時候,80%以上的內容都是跟真的伺服器相同的。只有一些比較機密的信息沒有防治在蜜罐伺服器上。而且蜜罐伺服器所採取的安全措施跟真的伺服器事完全相同的。這不但可以提高蜜罐伺服器的真實性,而且也可以用來評估真實伺服器的安全性。一舉兩得。
二是需要有意無意的將攻擊者引向蜜罐伺服器。攻擊者在判斷一個Web伺服器是否值得攻擊時,會進行評估。如評估這個網站的流量是否比較高。如果網站的流量不高,那麼即使被攻破了,也沒有多大的實用價值。攻擊者如果沒有有利可圖的話,不會花這么大的精力在這個網站伺服器上面。如果要將攻擊者引向這個蜜罐伺服器的話,那麼就需要提高這個蜜罐伺服器的訪問量。其實要做到這一點也非常的容易。現在有很多用來交互流量的團隊。只要花一點比較小的投資就可以做到這一點。
四、專人對Web伺服器的安全性進行測試
俗話說,靠人不如靠自己。在Web伺服器的攻防戰上,這一個原則也適用。筆者建議,如果企業對於Web服務的安全比較高,如網站伺服器上有電子商務交易平台,此時最好設置一個專業的團隊。他們充當攻擊者的角色,對伺服器進行安全性的測試。這個專業團隊主要執行如下幾個任務。
一是測試Web管理團隊對攻擊行為的反應速度。如可以採用一些現在比較流行的攻擊手段,對自己的Web伺服器發動攻擊。當然這個時間是隨機的。預先Web管理團隊並不知道。現在要評估的是,Web管理團隊在多少時間之內能夠發現這種攻擊的行為。這也是考驗管理團隊全天候跟蹤的能力。一般來說,這個時間越短越好。應該將這個時間控制在可控的范圍之內。即使攻擊最後沒有成功,Web管理團隊也應該及早的發現攻擊的行為。畢竟有沒有發現、與最終有沒有取得成功,是兩個不同的概念。
二是要測試伺服器的漏洞是否有補上。畢竟大部分的攻擊行為,都是針對伺服器現有的漏洞所產生的。現在這個專業團隊要做的就是,這些已發現的漏洞是否都已經打上了安全補丁或者採取了對應的安全措施。有時候我們都沒有發現的漏洞是無能為力,但是對於這些已經存在的漏洞不能夠放過。否則的話,也太便宜那些攻擊者了。
⑤ 如何減輕web伺服器的負擔
網站伺服器運行段間down掉原能造種現象:比tomcat堆非堆內存設置足程序沒能釋放內存空間造內存溢或者某些進程直運行沒能釋放造cup資源量消耗除程序本身原能客服端訪問造(客戶端包含蜘蛛軟體等搜索引擎)伺服器客戶端建立鏈接(用netstat -a命令查看網路訪問信息)需要http響應connection做定設置
http1.1requestreponse header都能現connection欄位header含義clientserver通信於鏈接何進行處理http1.1clientserver都默認支持鏈接 client使用http1.1協議希望使用鏈接則需要header指明connection值close;server想支持鏈接則response需要明確說明connection值close
論requestresponseheader包含值closeconnection都表明前使用tcp鏈接請求處理完畢斷掉client再進行新請求必須創建新tcp鏈接
HTTP Connectionclose設置允許客戶端或伺服器任何關閉底層連接雙都要求處理請求關閉TCP連接
何程序設置:濾器加入:response.setHeader(connection, close);
內容自: HTTP Keep-Alive詳解
HTTP Keep Alive
HTTP Keep-Alive 程序誤解面介紹HTTP/坦敗1.0HTTP/1.1版本何工作及其JAVA運行原理
HTTP請求響應模式典型範例即客戶端向伺服器發送請求信息伺服器響應信息HTTP版本每請求都創建新客戶端->伺服器連接連接發送請求接收請求模式優點簡單容易理解編程實現;缺點效率低Keep-Alive提用解決效率低問題
HTTP/1.0
HTTP/1.0版本並沒官標准規定Keep-Alive何工作實際附加HTTP/1.0協議客戶端瀏覽器支持Keep-AliveHTTP請求添加欄位 Connection: Keep-Alive伺服器收附帶Connection: Keep-Alive請求響應添加扮滑同欄位使用Keep-Alive客戶端伺服器間HTTP連接保持斷(超Keep-Alive規定間意外斷電等情況除外)客戶端發送另外請求使用條已經建立連接
HTTP/1.1
HTTP/1.1版本官規定Keep-Alive使用標准HTTP/1.0版本些同默認情況所HTTP1.1所連接都保持除非請求或響應指明要關閉:Connection: Close Connection: Keep-Alive欄位再沒意義原另外添加新欄位Keep-Alive:欄位並沒詳細描述用做忽略
Not reliable(靠)
HTTP狀態協議意味著每請求都獨立Keep-Alive沒能改變結另外Keep-Alive能保證客戶端伺服器間連接定躍HTTP1.1版本唯能保證連接關閉能通知所應該讓程序依賴於Keep-Alive保持連接特性否則意想
Keep-AlivePOST
HTTP1.1細則規定POST消息體面能任何字元指於某特定瀏覽器能並遵循標准(比POST消息體面放置CRLF符)據我所知部瀏覽器POST消息體都自跟CRLF符再發送何解決問題呢根據面說明POST請求禁止使用Keep-Alive或者由伺服器自忽略CRLF部伺服器都自忽略未經測試前能知道伺服器否做
內容自:
HTTP狀態協議Connection:Keep-Alive容易犯誤區
名詞解釋:
HTTP狀態:狀態指協議於事務處理沒記憶能力伺服器知道客戶端狀態另面講打伺服器網頁前打伺服器網頁間沒任何聯系
要實現購物車需要藉助於Cookie或Session或伺服器端API(NSAPI and ISAPI)記錄些信息請求伺服器結算頁面同些信息提交伺服器
登錄網站登錄狀態由Cookie或Session記憶伺服器並知道否登錄
優點:伺服器用每客戶端連接配內存記憶量狀態用客戶端失連接清理內存更高效處理WEB業務
缺點:客戶端每請求都需要攜帶相應參數服廳信臘務器需要處理些參數
Keep-Alive:參考另外篇文章HTTP Keep-Alive 詳解
容易犯誤區:
1、HTTP狀態面向連接協議狀態代表HTTP能保持TCP連接更能代表HTTP使用UDP協議(連接)
2、HTTP/1.1起默認都啟Keep-Alive保持連接特性簡單說網頁打完客戶端伺服器間用於傳輸HTTP數據TCP連接關閉客戶端再訪問伺服器網頁繼續使用條已經建立連接
3、Keep-Alive永久保持連接保持間同伺服器軟體(Apache)設定間
內容自:
Keep-Alive簡介及Tomcat配置
Keep-Alive功能使客戶端伺服器端連接持續效現伺服器繼請求Keep-Alive功能避免建立或者重新建立連接市場 部Web伺服器包括iPlanet、IISApache都支持HTTP Keep-Alive於提供靜態內容網站說功能通用於負擔較重網站說存另外問題:雖客戶保留打連 接定處同影響性能處理暫停期間本釋放資源仍舊佔用Web伺服器應用伺服器同台機器運行Keep-Alive功能資源利用影響尤其突 功能HTTP 1.1預設功能HTTP 1.0加Keep-Alive header提供HTTP持續作用功能
Keep-Alive: timeout=5, max=100
timeout:期間5秒(應httpd.conf參數:KeepAliveTimeout)max百請求強制斷掉連接
timeout間內新連接同max自減1直0強制斷掉
Tomcat相關設置,server.xml Connector 元素
keepAliveTimeout:
間連接close單位milliseconds
maxKeepAliveRequests:
連接數(1表示禁用-1表示限制數默認100般設置100~200間).
maxKeepAliveRequests=1″避免tomcat產量TIME_WAIT連接定程度避免tomcat假死
<Connector executor=tomcatThreadPool
port=80″ protocol=HTTP/1.1″
connectionTimeout=60000″
keepAliveTimeout=15000″
maxKeepAliveRequests=1″
redirectPort=443″
maxHttpHeaderSize=8192″ URIEncoding=UTF-8″ enableLookups=false acceptCount=100″ disableUploadTimeout=true/>?網站伺服器運行段間down掉原能造種現象:比tomcat堆非堆內存設置足程序沒能釋放內存空間造內存溢或者某些進程直運行沒能釋放造cup資源量消耗除程序本身原能客服端訪問造(客戶端包含蜘蛛軟體等搜索引擎)伺服器客戶端建立鏈接(用netstat -a命令查看網路訪問信息)需要http響應connection做定設置
http1.1requestreponse header都能現connection欄位header含義clientserver通信於鏈接何進行處理http1.1clientserver都默認支持鏈接 client使用http1.1協議希望使用鏈接則需要header指明connection值close;server想支持鏈接則response需要明確說明connection值close
論requestresponseheader包含值closeconnection都表明前使用tcp鏈接請求處理完畢斷掉client再進行新請求必須創建新tcp鏈接
HTTP Connectionclose設置允許客戶端或伺服器任何關閉底層連接雙都要求處理請求關閉TCP連接
何程序設置:濾器加入:response.setHeader(connection, close);
內容自: HTTP Keep-Alive詳解
HTTP Keep Alive
HTTP Keep-Alive 程序誤解面介紹HTTP/1.0HTTP/1.1版本何工作及其JAVA運行原理
HTTP請求響應模式典型範例即客戶端向伺服器發送請求信息伺服器響應信息HTTP版本每請求都創建新客戶端->伺服器連接連接發送請求接收請求模式優點簡單容易理解編程實現;缺點效率低Keep-Alive提用解決效率低問題
HTTP/1.0
HTTP/1.0版本並沒官標准規定Keep-Alive何工作實際附加HTTP/1.0協議客戶端瀏覽器支持Keep-AliveHTTP請求添加欄位 Connection: Keep-Alive伺服器收附帶Connection: Keep-Alive請求響應添加同欄位使用Keep-Alive客戶端伺服器間HTTP連接保持斷(超Keep-Alive規定間意外斷電等情況除外)客戶端發送另外請求使用條已經建立連接
HTTP/1.1
HTTP/1.1版本官規定Keep-Alive使用標准HTTP/1.0版本些同默認情況所HTTP1.1所連接都保持除非請求或響應指明要關閉:Connection: Close Connection: Keep-Alive欄位再沒意義原另外添加新欄位Keep-Alive:欄位並沒詳細描述用做忽略
Not reliable(靠)
HTTP狀態協議意味著每請求都獨立Keep-Alive沒能改變結另外Keep-Alive能保證客戶端伺服器間連接定躍HTTP1.1版本唯能保證連接關閉能通知所應該讓程序依賴於Keep-Alive保持連接特性否則意想
Keep-AlivePOST
HTTP1.1細則規定POST消息體面能任何字元指於某特定瀏覽器能並遵循標准(比POST消息體面放置CRLF符)據我所知部瀏覽器POST消息體都自跟CRLF符再發送何解決問題呢根據面說明POST請求禁止使用Keep-Alive或者由伺服器自忽略CRLF部伺服器都自忽略未經測試前能知道伺服器否做
內容自:
HTTP狀態協議Connection:Keep-Alive容易犯誤區
名詞解釋:
HTTP狀態:狀態指協議於事務處理沒記憶能力伺服器知道客戶端狀態另面講打伺服器網頁前打伺服器網頁間沒任何聯系
要實現購物車需要藉助於Cookie或Session或伺服器端API(NSAPI and ISAPI)記錄些信息請求伺服器結算頁面同些信息提交伺服器
登錄網站登錄狀態由Cookie或Session記憶伺服器並知道否登錄
優點:伺服器用每客戶端連接配內存記憶量狀態用客戶端失連接清理內存更高效處理WEB業務
缺點:客戶端每請求都需要攜帶相應參數伺服器需要處理些參數
Keep-Alive:參考另外篇文章HTTP Keep-Alive 詳解
容易犯誤區:
1、HTTP狀態面向連接協議狀態代表HTTP能保持TCP連接更能代表HTTP使用UDP協議(連接)
2、HTTP/1.1起默認都啟Keep-Alive保持連接特性簡單說網頁打完客戶端伺服器間用於傳輸HTTP數據TCP連接關閉客戶端再訪問伺服器網頁繼續使用條已經建立連接
3、Keep-Alive永久保持連接保持間同伺服器軟體(Apache)設定間
內容自:
Keep-Alive簡介及Tomcat配置
Keep-Alive功能使客戶端伺服器端連接持續效現伺服器繼請求Keep-Alive功能避免建立或者重新建立連接市場 部Web伺服器包括iPlanet、IISApache都支持HTTP Keep-Alive於提供靜態內容網站說功能通用於負擔較重網站說存另外問題:雖客戶保留打連 接定處同影響性能處理暫停期間本釋放資源仍舊佔用Web伺服器應用伺服器同台機器運行Keep-Alive功能資源利用影響尤其突 功能HTTP 1.1預設功能HTTP 1.0加Keep-Alive header提供HTTP持續作用功能
Keep-Alive: timeout=5, max=100
timeout:期間5秒(應httpd.conf參數:KeepAliveTimeout)max百請求強制斷掉連接
timeout間內新連接同max自減1直0強制斷掉
Tomcat相關設置,server.xml Connector 元素
keepAliveTimeout:
間連接close單位milliseconds
maxKeepAliveRequests:
連接數(1表示禁用-1表示限制數默認100般設置100~200間).
maxKeepAliveRequests=1″避免tomcat產量TIME_WAIT連接定程度避免tomcat假死
<Connector executor=tomcatThreadPool
port=80″ protocol=HTTP/1.1″
connectionTimeout=60000″
keepAliveTimeout=15000″
maxKeepAliveRequests=1″
redirectPort=443″
maxHttpHeaderSize=8192″ URIEncoding=UTF-8″ enableLookups=false acceptCount=100″ disableUploadTimeout=true/>
⑥ 如何優化web伺服器的訪問速度
網站運營的任何時期,網站訪問速度都是至關重要的部分,它是網站友好體驗中最基本的一項,如果訪問體驗都令人不滿意,那麼後期所做的營銷推廣模式都有可能徒勞無功,因為網路中客戶的選擇成本很低,加上普遍客戶的耐心都不高,頁面訪問超過6秒客戶就會選擇離開,這對於一些流量本來就不高的企業網站來說無疑是雪上加霜。
一、升級正在使用中的伺服器
進行伺服器升級工作之前,要考慮多方面的問題,是升級已有的伺服器還是購置新的伺服器設備須根據實際情況抉擇。首先來說升級現有的伺服器設備,一般來說網站運營到後期隨著業務不斷增加,多平台應用的開發對於伺服器性能的要求也逐步提升,長而久之伺服器遇到性能瓶頸也是情理之中的事情,對於這種情況,我們可以通過升級伺服器(例如增加硬體設備或網路帶寬)等相關配置來滿足不斷擴大的業務需求,那麼伺服器性能瓶頸問題就可以得到解決。
二、優化正在使用的伺服器
不管是完成升級後的伺服器,還是新購置的伺服器,我們都要對其進行優化,從而提升伺服器的性能以及利用率。如何優化伺服器?作為在國互網工作到現在的資深IDC工作人員,小編認為大概分為以下四個方面
要點一:盡可能的減少HTTP請求數
從客戶訪問網站頁面到整個頁面內容完全展現出來,這其中要花費較多的時間來下載各種Scripts、CSS樣式表、Flash以及圖片,而每一類下載都相當於一次HTTP請求,這樣的請求越多網站被完全載入出來所花的時間會越長,意味著客戶端的訪問會很慢,那麼此時就需要盡可能的減少HTTP請求數,通常我們可以直接把css和js寫入到頁面中,避免了外部的調用;或者我們可以把CSS文件和JS文件分來,在後台再進行合並,這樣客戶端瀏覽器相當於一次請求。這是小編在國互網美女前端那學來的。
要點二:降低DNS查詢時間
眾所周知網路伺服器端的域名和IP地址是相互對應的,當客戶端發出請求時,計算機還需要通過域名和IP地址的相互轉換來判斷,而這個轉換工作便是域名解析DNS,通常DNS的查詢需要10~20毫秒時間,客戶端瀏覽器也只會等待DNS查詢結束之後才會載入此域名下的內容。因此,我們要加快頁面的訪問速度,就可以從降低DNS查詢時間方面去做改善。
要點三:啟用伺服器Gzip壓縮功能
對於大中型網站來說,頁面的內容多且比較多樣化,單個頁面的大小可能是幾百K以上了,客戶端訪問的時候下載會比較慢,此時我們可以採用伺服器Gzip頁面壓縮功能,可以將一個大小為100K的頁面文件壓縮成25K以下,這樣就可以減少網路傳輸的數量從而提高客戶端訪問速度。一般伺服器都是可以使用Gzip壓縮功能的,並且能夠針對JS文件、CSS文件和Html進行壓縮,多方面去進行優化網站訪問速度。
要點四:推薦大中型網站使用CDN加速工具
CDN加速是目前大型網站普遍使用的頁面加速方式,它對於網站優化幾乎沒有影響的,基本原理是將網站鏡像備份到很多伺服器節點上,使伺服器節點周圍的用戶訪問速度更快,從而提升客戶端高速訪問網站的體驗;但是並不是所有的網站都適合使用CDN加速,一般對於小規模站點個人站的話,就不需要使用CDN加速,畢竟從長期來看這可是一筆不小的開支;建議圖片站以及多媒體站點可使用CDN加速。
希望以上知識能夠幫到您
⑦ web伺服器優化的方法
在對Web伺服器進行優化時要根據真實的Web應用系統的情況和特徵來採取有針對性地優化方案。
1.根據不同的網路特性來看:
1.1區域網
在區域網中,降低M T U (最大傳輸單位)值對可以避免復制數據和要求校驗,而通過優化select系統調用或在Socket事件處理器中執行計算可以優化請求並發管理,利用HTTP1.1持續連接等都可以使系統性能得到相應的改善但在廣域網的環境下卻沒有什麼大的作用,有的甚至恰恰相反。
1.2廣域網
在廣域網中,終端用戶的請求的等待時間依賴於與網路延遲的程度,連接帶寬限制情況。對於廣域網,軟硬中斷在網路處理中佔有很大的分量,所以採用適應的中斷處理機制將會給伺服器的響應能力帶來很大的好處;將伺服器定位在內核和將基於進程設計改為基於事務處理也可以不同程度的提高伺服器的性能。
2.關於Web負載
除了對Web負載的特徵進行分析以便在評測時更好地再現真實負載之外,還要考慮Web伺服器所在的網路環境下負載的情況。人們不僅要求伺服器滿足正常的工作負載要求,而且在高峰時期依然要保持較高的吞吐量。但是,伺服器在高負載的情況下的性能表現往往低於人們的期望。
伺服器過載的情況分為兩種:
2.1瞬間過載
伺服器暫時的、短時間的超載,這種情況主要是由伺服器負載的特點引起的。大量的研究表明,Web請求的網路通信量分布是自相似的,即Web請求的通信量可以在很大范圍內有顯著的變化。這就造成伺服器常常短時間的超載,但這樣情況持續的時間一般很短
2.2伺服器長時間的超載
這種情況一般是由某一特殊事件引起的,例如伺服器受到拒絕服務攻擊或者發生了「活鎖」現象
第一種伺服器超載情況是不可避免的,但第二種情況則可以通過對伺服器改進來改善。拋開惡意的攻擊不算,仔細分析伺服器處理信息包的過程可以發現,造成系統在超載情況下性能下降的根本原因是高優先順序處理階段對CPU的不公平搶占。
因此,如果限制高優先順序處理階段對CPU的佔用率,或者限制處理高優先順序的CPU個數,都可以減輕或者消除收包活鎖現象。
具體的可以採用以下的方法:
2.2.1採用輪詢機制
為了減少中斷對系統性能的影響,在負載正常的情況下採用「下半處理」 的方法就非常有效,而在高負荷情況下,採用這個方法仍然會造成活鎖現象,這時可以採用輪詢機制。雖然這個方法在負載正常的情況下會造成資源的浪費和響應速度降低,但在網路數據頻繁到達伺服器時就要比中斷驅動技術有效的多。
2.2.2減少上下文切換
這種方法不管伺服器在什麼情況下對性能改善都很有效,這時可以採用引入核心級(kerne1—leve1)或硬體級數據流的方法來達到這個目的。核心級數據流是將數據從源通過系統匯流排進行轉發而不需要使數據經過應用程序進程,這個過程中因為數據在內存中,因此需要CPU操作數據。
硬體級數據流則是將數據從源通過私有數據匯流排或是雖等DMA通過系統匯流排進行轉發而不需要使數據經過應用程序進程,這個過程不需要CPU操作數據。這樣在數據傳輸過程中不需要用戶線程的介入,減少了數據被拷貝的次數,減少了上下文切換的開銷。
2.2.3減低中斷的頻率(主要是針對高負荷情況的方法)
這里主要有兩種方法:批中斷和暫時關閉中斷。批中斷可以在超載時有效的抑制活鎖現象,但對伺服器的性能沒有什麼根本性的改進;當系統出現接收活鎖跡象時,可以採用暫時關閉中斷的方法來緩和系統的負擔,當系統緩存再次可用時可以再打開中斷,但這種方法在接收緩存不夠大的情況下會造成數據包丟失。
四.Web伺服器優化總結
Web伺服器性能是整個Web系統的關鍵環節,提高Web伺服器的性能也是長久以來人們一直關注的課題。這里通過對Web伺服器的工作原理和現有的優化方法和技術的分析,得出了對待Web伺服器性能的提高也應該具體問題具體分析,要在具體的應用環境中,根據其特點來採取相應的優化措施。
⑧ Java web項目,怎麼做負載均衡啊
HAProxy是一款反向代理伺服器工具,通過它,可以實現負載均衡。它支持雙機熱備支持虛擬主機,但其配置簡單,擁有非常不錯的伺服器健康檢查功能,當其代理的後端伺服器出現故障, HAProxy會自動將該伺服器摘除,故障恢復後再自動將該伺服器加入。新的1.3引入了frontend,backend,frontend根據任意HTTP請求頭內容做規則匹配,然後把請求定向到相關的backend.
利用HAPorxy實現負載均衡
1. 利用HAProxy實現負載均衡
192.168.169.137 (haproxy)———負載均衡———-(192.168.169.117;192.168.169.118)
安裝配置HAproxy
cd /usr/local/
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz
tar zxvf haproxy-1.3.14.2.tar.gz
mv haproxy-1.3.14.2 haproxy
cd haproxy
make TARGET=linux26
2. 創建配置文件
# vi haproxy.cfg
global
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 2 #通過nbproc多設置幾個haproxy並發進程,這樣每個進程的task_queue相對就會短很多,性能自然就能提高不少
#pidfile /var/run/haproxy-private.pid
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local3
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats uri /haproxy-stats #監控haproxy狀態
stats realm Haproxy\ statistics
stats auth netseek:52netseek #設置狀態監控的用戶名為netseek密碼為52netseek
balance roundrobin #負載均衡演算法
cookie SERVERID insert indirect
option httpclose #
option forwardfor #apache日誌轉發功能
option httpchk HEAD /check.txt HTTP/1.0 #健康檢測
server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5
syslog.conf里加一行
local3.* /var/log/haproxy.log
# touch /var/log/haproxy.log
# chown haproxy:haproxy /var/log/haproxy.log
# chmod u+x /var/log/haproxy.log
# tail –f /var/log/harpoxy.log 監控日誌
# ./haproxy -f haproxy.cfg 啟動服務.
監控狀態圖示http://192.168.169.137/haproxy-stats ,輸入用戶名密碼查看狀態。
後端apache日誌處理
配置httpd.conf
LogFormat 「%{X-Forwarded-For}i %l %u %t \」%r\」 %>s %b 」 combined
CustomLog /var/log/httpd/access_log combined
虛擬主機不記錄檢測日誌:
SetEnvIf Request_URI 「^/check\.txt$」 dontlog
LogLevel warn
ErrorLog /var/log/httpd/vhost_error.log
CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
相關介紹
#./haproxy –help //haproxy相關命令參數介紹.
haproxy -f <配置文件> [-n 最大並發連接總數] [-N 每個偵聽的最大並發數] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <內存限制M>] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式啟動
-q 安靜模式,不輸出信息
-V 詳細模式
-c 對配置文件進行語法檢查
-s 顯示統計數據
-l 顯示詳細統計數據
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用後台模式,程序跑在前台
-sf <pidlist>
程序啟動後向pidlist里的進程發送FINISH信號,這個參數放在命令行的最後
-st <pidlist>
程序啟動後向pidlist里的進程發送TERMINATE信號,這個參數放在命令行的最後