隨筆-62  評(píng)論-29  文章-0  trackbacks-0

          Web壓力測(cè)試是目前比較流行的話題,利用Web壓力測(cè)試可以有效地測(cè)試一些Web服務(wù)器的運(yùn)行狀態(tài)和響應(yīng)時(shí)間等等,對(duì)于Web服務(wù)器的承受力測(cè)試是個(gè)非常好的手法。Web 壓力測(cè)試通常是利用一些工具,例如微軟的Web Application Stress、Linux下的siege、功能全面的Web-CT等等,這些都是非常優(yōu)秀的Web壓力測(cè)試工具。

          雖然這些工具給我們測(cè)試服務(wù)器承受能力帶來方便,但是它們的危害卻更是驚人,甚至于利用隨便一種比較全面的測(cè)試工具就可以對(duì)一臺(tái)小型的 Web服務(wù)器發(fā)動(dòng)災(zāi)難性的拒絕式攻擊。下面我就帶大家利用微軟的Web Application Stress進(jìn)行一次Web壓力測(cè)試,其目的是為了讓大家看到它的巨大危害。

          一、工具簡(jiǎn)單介紹

          Microsoft Web Application Stress Tool 是由微軟的網(wǎng)站測(cè)試人員所開發(fā),專門用來進(jìn)行實(shí)際網(wǎng)站壓力測(cè)試的一套工具。透過這套功能強(qiáng)大的壓力測(cè)試工具,您可以使用少量的客戶端計(jì)算機(jī)仿真大量用戶上線對(duì)網(wǎng)站服務(wù)所可能造成的影響,在網(wǎng)站實(shí)際上線之前先對(duì)您所設(shè)計(jì)的網(wǎng)站進(jìn)行如同真實(shí)環(huán)境下的測(cè)試,以找出系統(tǒng)潛在的問題,對(duì)系統(tǒng)進(jìn)行進(jìn)一步的調(diào)整、設(shè)置工作。就是因?yàn)檫@些特性,才使它具備了D.O.S轟炸的功能。

          小提示:D.O.S(拒絕服務(wù)攻擊)通過使你的服務(wù)計(jì)算機(jī)崩潰或把它壓跨來阻止你提供服務(wù)。簡(jiǎn)單來說,就是讓你的計(jì)算機(jī)提供可能多的服務(wù)從而使你的計(jì)算機(jī)陷入崩潰的邊緣或崩潰。

          二、工具簡(jiǎn)單設(shè)置

          打開Web Application Stress Tool,很簡(jiǎn)潔的一個(gè)頁面(如圖1),上面是工具欄,左下方是功能選項(xiàng),右下方是詳細(xì)設(shè)置選項(xiàng)。在對(duì)目標(biāo)Web服務(wù)器進(jìn)行壓力測(cè)試之前,先對(duì)它進(jìn)行一些必要的設(shè)置。

          圖1


          1. 在“settings”的功能設(shè)置中(如圖2),一個(gè)是Stress level (threads)這里是指定程序在后臺(tái)用多少線程進(jìn)行請(qǐng)求,也就是相當(dāng)于模擬多少個(gè)客戶機(jī)的連接,更加形象的就是說設(shè)置多少轟炸的線程數(shù)。一般填寫 500~1000,因?yàn)檫@個(gè)線程數(shù)是根據(jù)本機(jī)的承受力來設(shè)置的,如果你對(duì)自己的機(jī)器配置有足夠信心的話,那么設(shè)置的越高,轟炸的效果越好。
          要改變并發(fā)用戶數(shù),點(diǎn)Settings圖標(biāo)。如果少于100個(gè)用戶,你可以直接設(shè)置Stress Level,要模擬多于100個(gè)用戶,你還須設(shè)置Stress Multiplier。基本公式為:用戶數(shù)(線程數(shù))= Stress Level * Stress Multiplier.如果要模擬1,000個(gè)用戶,你可以設(shè)置Stress Level為100而Stress Multiplier為10。


          圖2

          2.在“Test Run Time”中來指定一次壓力測(cè)試需要持續(xù)的時(shí)間,分為天、小時(shí)、分、秒幾個(gè)單位級(jí)別,你根據(jù)實(shí)際情況來設(shè)置吧!

          3.其余的選項(xiàng)不太重要,這里就不再浪費(fèi)筆墨,朋友們可以自己嘗試一下設(shè)置。

          三、壓力測(cè)試

          工具介紹完了,下面來準(zhǔn)備條件:這里與一個(gè)朋友商量好進(jìn)行測(cè)試,他是單機(jī)上網(wǎng),機(jī)器配置是CPU:Athlon XP2500+、內(nèi)存512MB、硬盤80GB等,機(jī)器配置還不錯(cuò)。他在機(jī)器上安裝了IIS,架設(shè)了一臺(tái)對(duì)外的Web服務(wù)器,Web服務(wù)中的程序是動(dòng)網(wǎng) 7.0。我就利用壓力測(cè)試工具對(duì)這臺(tái)服務(wù)器進(jìn)行測(cè)試。

          步驟1:在工具中點(diǎn)右鍵,選擇Add命令,增加了一個(gè)新的測(cè)試項(xiàng)目:New script,對(duì)它進(jìn)行設(shè)置,在主選項(xiàng)中的server中填寫要測(cè)試的服務(wù)器的IP地址。在下方選擇測(cè)試的Web連接方式,這里的方式Verb選擇 get,path選擇要測(cè)試的Web頁面路徑,這里填寫/Index.asp,即動(dòng)網(wǎng)的首頁文件(如圖3)。

          圖3

          步驟2:在“Settings”的功能設(shè)置中將Stress level (threads)線程數(shù)設(shè)置為1000。完畢后,點(diǎn)工具中的灰色三角按鈕即可進(jìn)行測(cè)試(如圖4)。測(cè)試完畢,等待朋友把任務(wù)管理器以及連接查看的截圖發(fā)過來!

          圖4

          攻擊開始后,朋友從任務(wù)管理器中可以看到CPU使用率已經(jīng)達(dá)到100%,損耗率達(dá)到最大(如圖5)。在CMD窗口中使用命令netstat -an,可以看到我的IP地址在朋友服務(wù)器上的80端口進(jìn)行了非常多的連接(如圖6)。而且它的Web網(wǎng)站已經(jīng)打不開了,提示過多用戶連接,達(dá)到了跟 D.O.S攻擊一樣的目的。

          圖5

          圖6

          試想,如果利用多臺(tái)肉雞對(duì)一臺(tái)服務(wù)器進(jìn)行Web壓力測(cè)試,那么對(duì)這臺(tái)服務(wù)器來說將是滅頂之災(zāi),所以朋友們?cè)谑褂盟耙欢ㄒ髦乜紤]。


          分析測(cè)試結(jié)果
          你可以點(diǎn)工具條上的Reports圖標(biāo)來看產(chǎn)生的報(bào)告。這將產(chǎn)生一個(gè)與Script tab相臨的新的tab。報(bào)告被存儲(chǔ)在一個(gè)大綱視圖里。首先,在你的報(bào)告下面點(diǎn)Result Codes,這個(gè)將給你一個(gè)快速的印象,這次測(cè)試是否出現(xiàn)了什么問題。如果你看到的狀態(tài)代碼不是200,你也許需要調(diào)查一下出現(xiàn)了什么問題,通常的問題包括署名和不正確的URL路徑。

          點(diǎn)Overview,你將看到這個(gè)測(cè)試活動(dòng)的一個(gè)簡(jiǎn)要快速的分析。從ASP的技術(shù)角度看,Request per Second,是一個(gè)需要深入分析的關(guān)鍵值。這個(gè)值越高越好。通常,如果你不能從使用報(bào)告和預(yù)算中決定出一個(gè)特定的目標(biāo),你可以讓ASP 的Requests per Second值高于30,當(dāng)然這個(gè)ASP是沒有連數(shù)據(jù)庫或使用其他組件的。因?yàn)榭梢灶A(yù)見,連接數(shù)據(jù)庫將增加程序的負(fù)擔(dān)。

          雖然有Request per Second這個(gè)計(jì)數(shù)器默認(rèn)包含在WAS里,你也許想增加其他的計(jì)數(shù)器。你可以在點(diǎn)了Perf Counters的圖標(biāo)后通過點(diǎn)Add Counter來增加其他的計(jì)數(shù)器。一個(gè)特別有用的計(jì)數(shù)器是ASP Requests Queued,這個(gè)計(jì)數(shù)器往往是在識(shí)別一個(gè)阻塞或長期駐留的頁面或組件時(shí)的關(guān)鍵。關(guān)于分析ASP性能的資源有:

          · Tuning Internet Information Server Performance

          · Navigating the Maze of Settings for Web Server Performance Optimization

          · IIS 4 Resource Kit

          影響性能和可測(cè)量性的因素
          服務(wù)器組成,數(shù)據(jù)庫訪問,和其他因素會(huì)大大降低ASP的Request per Second值。不同的配置選擇也會(huì)起到不同的作用,在這里我要指出幾個(gè)常出現(xiàn)的因素:

          · 如果你在訪問一個(gè)數(shù)據(jù)庫,你是否有做連接池?關(guān)于連接池的詳細(xì)資料請(qǐng)看Pooling in the Microsoft Data Access Components.

          · 你是否在使用ASP Session 變量來存儲(chǔ)狀態(tài)?Session 變量會(huì)很快地影響可測(cè)性。它們需要服務(wù)器資源,而且如果你想增加機(jī)器以擴(kuò)展性能,它們會(huì)起阻礙作用,因?yàn)镾ession是與特定機(jī)器相關(guān)連的。無狀態(tài)是最大化可擴(kuò)展性的方法。關(guān)于Session的替代請(qǐng)參考這篇文章: HowTo: Persisting Values without Session.

          · 你是否在Session狀態(tài)中存儲(chǔ)有Visual Basic的組件?現(xiàn)在就去掉它們。Session中的Visual Basic對(duì)象會(huì)導(dǎo)致線程相關(guān)性而且會(huì)干擾打擊IIS的線程池。這是一個(gè)復(fù)雜的主題,但是滿足它的經(jīng)驗(yàn)方法是:不要在Session中存儲(chǔ)Single-threaded Apartment (STA) objects。如果你需要在Session中保留對(duì)象,它們應(yīng)該被標(biāo)記為”Both”,而且你需要自己聚合這些自由線程成為一個(gè)集合。Active Template Library (ATL)可以創(chuàng)建這樣的怪物。

          · 你的網(wǎng)絡(luò)程序是被限定運(yùn)行在它自己的內(nèi)存空間的嗎?實(shí)際上我們推薦進(jìn)程保護(hù)。然而,如果你需要榨出一些額外的性能,在進(jìn)程中運(yùn)行你的網(wǎng)絡(luò)程序?qū)?huì)節(jié)省一些交叉進(jìn)程集合的開銷。

          · 當(dāng)涉及Microsoft Transaction Server (MTS) components時(shí),如果組件是作為服務(wù)器包而運(yùn)行的而不是庫包,那么將會(huì)有明顯的性能區(qū)別。一個(gè)通常的建議是設(shè)置網(wǎng)絡(luò)程序在它自己的內(nèi)存空間中運(yùn)行,然后在庫包中運(yùn)行MTS組件。

          模擬多用戶的情況
          我會(huì)簡(jiǎn)要的介紹如何在WAS中模擬多用戶請(qǐng)求的情況。你需要做兩件事:

          1. 在Settings面板改變Concurrent Connections。

          2. 在Users創(chuàng)建用戶,至少要?jiǎng)?chuàng)建多于你在Concurrent Connections里指定的用戶數(shù)。

          要改變并發(fā)用戶數(shù),點(diǎn)Settings圖標(biāo)。如果少于100個(gè)用戶,你可以直接設(shè)置Stress Level,要模擬多于100個(gè)用戶,你還須設(shè)置Stress Multiplier。基本公式為:用戶數(shù)(線程數(shù))= Stress Level * Stress Multiplier.如果要模擬1,000個(gè)用戶,你可以設(shè)置Stress Level為100而Stress Multiplier為10。

          如果你在沒有設(shè)置足夠的用戶前嘗試運(yùn)行腳本,你將會(huì)得到一個(gè)警告。通過點(diǎn)Users圖標(biāo)可以修改你的用戶數(shù),你將在右邊的窗口看到一個(gè)默認(rèn)的Default組。雙擊Default組展開你的用戶列表,如果你被允許匿名訪問,那么你只要簡(jiǎn)單的填入新用戶的代碼然后點(diǎn)Create就可以了。

          運(yùn)行需要署名登錄的測(cè)試
          如果你想運(yùn)行需要署名登錄的頁面,那么你需要?jiǎng)?chuàng)建合適的用戶名和密碼以便WAS在運(yùn)行時(shí)可以使用。這同樣是在Users設(shè)置的。你可以一開始就通過Remove All去掉當(dāng)前的用戶列表,然后添加你需要的用戶,你也可以選擇從文本文件導(dǎo)入用戶名和密碼。

          但是無論如何,需要確保這些用戶擁有有效的帳號(hào),而且他們都可以訪問IIS服務(wù)器。如果你使用的是BASIC基本認(rèn)證用戶帳號(hào),你可以通過在你的瀏覽器提交證書來測(cè)試這個(gè)帳號(hào),在文本文件寫出Request.ServerVariables("AUTH_USER")這個(gè)值將會(huì)有很大的幫助作用。我們修改后的ASP代碼將看起來是這樣的:

          oTS.writeline("Session Id: " & Session.SessionId & chr(32) & _
          "Time: " & Cstr(now()) & "AUTH USER: " & chr(32) & Request.ServerVariables("AUTH_USER"))
          使用WAS的技巧和提示
          作為結(jié)束,我會(huì)提供一些技巧和提示,還有一些經(jīng)驗(yàn)總結(jié):

          · 調(diào)整你的網(wǎng)站的日志文件的存儲(chǔ),因?yàn)檫@個(gè)文件將會(huì)快速的增大(見IIS文檔)

          · 通過設(shè)置注冊(cè)表中的HKEY_LOCAL_MACHINESoftwareMicrosoftWASSessionTrace的DWORD為1,你可以以調(diào)試的方式追蹤WAS的活動(dòng)

          · 如果你的WAS報(bào)告顯示錯(cuò)誤,務(wù)必檢查Event Log,在工具外用瀏覽器瀏覽你的頁面,然后檢查服務(wù)器的日志:WinNTsystem32LogFilesW3SVCi

          · 如果你的測(cè)試客戶端機(jī)器的處理器使用率超過了%85,你也許需要添加更多的測(cè)試客戶端

          · 一些更有趣的話題會(huì)在WAS的文檔里出現(xiàn):Page Groups, Query Strings, Cookies, Web Application Stress Object Model和Active Server Page Client (這個(gè)會(huì)讓你有能力通過Web遠(yuǎn)程控制測(cè)試客戶端)

          請(qǐng)注意這是個(gè)沒有技術(shù)支持的工具,發(fā)送你的問題到webtool@microsoft.com。你可以在Web Application Stress Tool這個(gè)網(wǎng)沾上搜索一些常見的問題。你也可以對(duì)這個(gè)工具進(jìn)行編程,在同樣的網(wǎng)站上有對(duì)象模型的參考。



          posted on 2009-06-02 11:41 閱讀(30344) 評(píng)論(6)  編輯  收藏

          評(píng)論:
          # re: 使用Microsoft Web Application Stress Tool對(duì)web進(jìn)行壓力測(cè)試 2013-02-28 11:28 | yili
          點(diǎn)Result Codes,我看到的狀態(tài)代碼不是200,請(qǐng)問下 是哪里有問題嗎

          Result Codes
          Code Description Count
          ================================================================================
          NA HTTP result code not given 28
          請(qǐng)問下樓主 這是正確的結(jié)果還是錯(cuò)誤的  回復(fù)  更多評(píng)論
            
          # re: 使用Microsoft Web Application Stress Tool對(duì)web進(jìn)行壓力測(cè)試 2013-03-19 16:30 | 田婧
          Web Application Stress Tool如何使用  回復(fù)  更多評(píng)論
            
          # re: 使用Microsoft Web Application Stress Tool對(duì)web進(jìn)行壓力測(cè)試 2013-03-28 17:08 | meteorfish
          這個(gè)壓力工具是不是不適用于jsp的網(wǎng)站測(cè)試呀?  回復(fù)  更多評(píng)論
            
          # re: 使用Microsoft Web Application Stress Tool對(duì)web進(jìn)行壓力測(cè)試[未登錄] 2014-01-17 18:47 | gfh
          這是錯(cuò)誤的返回,你測(cè)試機(jī)的IP被服務(wù)器所在機(jī)房攔截了,把你當(dāng)成攻擊源了@yili
            回復(fù)  更多評(píng)論
            
          # re: 使用Microsoft Web Application Stress Tool對(duì)web進(jìn)行壓力測(cè)試[未登錄] 2014-01-17 18:49 | gfh
          可以測(cè)試任何在windows PC上能訪問的網(wǎng)站@田婧
            回復(fù)  更多評(píng)論
            
          # re: 使用Microsoft Web Application Stress Tool對(duì)web進(jìn)行壓力測(cè)試 2015-03-10 19:38 | ginny
          圖6這個(gè)界面是如何出來的呀,什么情況下打開會(huì)有這些數(shù)據(jù)  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 固安县| 阿城市| 白沙| 阿图什市| 北安市| 崇信县| 辽源市| 武隆县| 定兴县| 齐河县| 禄丰县| 乐都县| 竹北市| 新闻| 余姚市| 赤峰市| 济阳县| 清丰县| 绥棱县| 康马县| 博爱县| 环江| 安岳县| 通化市| 泾阳县| 天台县| 通渭县| 葫芦岛市| 台中县| 沛县| 紫金县| 蒙阴县| 泾源县| 遂昌县| 沅江市| 郧西县| 汨罗市| 西充县| 万山特区| 威海市| 兖州市|