ESFramework底層使用最高效的IOCP(IO完成端口)模型,使得數(shù)據(jù)收發(fā)與處理達到最高性能。另外,ESFramework只會在需要時才使用必要的資源(如CPU、內存),并且會及時釋放持有的資源,可以超長時間(比如數(shù)年)穩(wěn)定運行,絕不會有內存泄露、死線程堆積等情況發(fā)生。由于ESFramework和StriveEngine使用的是同樣的底層內核,所以本測試的結果對StriveEngine也是適用的。
本實驗用于測試ESFramework/StriveEngine服務端引擎內核的性能和穩(wěn)定性,測試程序使用最新發(fā)布的ESFramework 4.2版本。
一.準備工作測試的機器總共有3臺,都是普通的PC,一臺作為服務器,兩臺作為客戶端。
作為服務器是PC配置如下:
操作系統(tǒng):Windows Server 2003 Enterprise Edition SP2
CPU:Pentium Dual-Core CPU E5400 @ 2.70GHz
內存:2G
二.測試策略本實驗所采用的策略是這樣的:
(1)每個客戶端實例首先與服務器建立N個TCP連接,然后依次在每個TCP連接上發(fā)送一個36字節(jié)的消息。遍歷一次完畢后,等待(Sleep)M毫秒,再進行下一輪遍歷發(fā)送。
(2)服務端接收到消息后,解析消息,然后累加消息的個數(shù)。
(3)客戶端統(tǒng)計已發(fā)消息的總數(shù),并計算上一秒發(fā)送的請求數(shù)。
(4)服務端統(tǒng)計已接收消息的總數(shù),并計算上一秒接收的請求數(shù)。
三.測試過程1.測試方案一:連接總數(shù)3000,每輪發(fā)送間隔100ms
(1)在作為服務器的PC上啟動服務端。
(2)在作為客戶端的兩臺PC上分別運行一個客戶端實例。每個客戶端實例設定連接數(shù)1500,每輪發(fā)送的間隔為100。
(3)如此,服務端的總的連接數(shù)為3000,以下是運行一段時間后的截圖:
在該測試過程中,服務端的每秒處理的消息數(shù)量在26000 ~30000之間波動,而CPU持續(xù)在80%以上。
另外,在客戶端的PC上通過NetLimitter可以看到每個連接上發(fā)出的數(shù)據(jù)流量:
2.測試方案二:連接總數(shù)6000,每輪發(fā)送間隔300ms
將方案一啟動的各程序全部關掉,重頭再來一次。
(1)在作為服務器的PC上啟動服務端。
(2)在作為客戶端的兩臺PC上分別運行一個客戶端實例。每個客戶端實例設定連接數(shù)3000,每輪發(fā)送的間隔為400。
(3)如此,服務端的總的連接數(shù)為6000,以下是運行一段時間后的截圖:
在該測試過程中,服務端的每秒處理的消息數(shù)量在14000 ~18000之間波動,而CPU持續(xù)在65%以上。
3.測試方案三:我們最后測試一種極端的情況,那就是極少的連接數(shù),極小的發(fā)送間隔。連接總數(shù)十多個,每輪發(fā)送間隔0ms。
(1)在作為服務器的PC上啟動服務端。
(2)在作為客戶端的一臺PC上逐個啟動客戶端,每個客戶端設定連接數(shù)為1,發(fā)送間隔為0ms,這樣,當增加到12個時,服務端的CPU幾乎始終維持在90%以上。
運行一段時間后的截圖如下所示:
在該測試過程中,服務端的每秒處理的消息數(shù)量在70000 ~ 80000之間波動,而CPU持續(xù)在90%以上。 【方案三測試 于2012.04.01所新增】
四.測試結論第三種方案是比較極端的,在現(xiàn)實場景中很少碰到,但是作為一個極端的測試還是有必要的。一般服務器都要承載至少數(shù)千用戶同時在線,所以我們主要討論大連接數(shù)的測試方案。
對于大連接數(shù)測試,除了前兩種方案的測試以外,我們還進行了其它方案的測試,比如設置更小的連接數(shù)(至少1000)和更小的發(fā)送間隔(至少5ms),或設置更大的連接數(shù)和更大的發(fā)送間隔。測試反映,這臺作為服務器的PC能承載的最佳并發(fā)連接數(shù)在4000左右,此時,服務器的吞吐量可以達到最大(每秒處理30000個左右的消息)。當連接數(shù)進一步增加時,吞吐量會降下來。最佳并發(fā)連接數(shù)和最大吞吐量的值與服務器機器的配置密切相關。
五.測試程序本文末會提供測試程序的壓縮包下載。在壓縮包內附帶了測試的服務端和客戶端程序,有興趣的朋友可以在自己的服務器上做更多的策略測試。在自己運行測試時,要注意以下幾點:
(1)服務端最好運行在一臺單獨的機器上。如果客戶端也運行在服務端所在的機器上,則會嚴重地影響服務端的吞吐量。
(2)合理地設置客戶端的連接數(shù)和發(fā)送時間間隔。
(3)客戶端運行的機器的操作系統(tǒng)對tcp連接數(shù)可能有最大值限制(有的是三千多),如果遇到這種系統(tǒng),而單個客戶端實例的連接數(shù)的設定又大于這個限制值,則會導致后續(xù)的tcp連接失敗。若發(fā)生這種情況,請關閉客戶端并重啟,然后設定較小的連接數(shù),再次測試。可以多開幾個客戶端實例,來增加連接數(shù)。
(4)如果服務器上有防火墻軟件,可能會影響測試結果,最好關閉服務器上的防火墻進行測試。
(5)如果是在Internet上測試,請確保服務端帶寬和客戶端的帶寬都足夠大。
歡迎光臨 灰鴿子遠程控制軟件 (http://www.dumiaotech.com/) | Powered by Discuz! X3.4 |