1. 程式人生 > >LoadRunner中程序執行和執行緒執行區別

LoadRunner中程序執行和執行緒執行區別

LoadRunner中程序執行和執行緒執行區別

LoadRunner中的程序與執行緒

 

 1、程序與執行緒的區別:

   

程序和執行緒的區別是什麼?
程序和執行緒都是由作業系統所體會的程式執行的基本單元,系統利用該基本單元實現系統對應用的併發性。程序和執行緒的區別在於:
簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒. 執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。

另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。


程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位. 執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源. 一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行.

 

2、按執行緒執行VUSER和按程序執行VUSER的區別

1. 按執行緒執行VUSER,LR預設情況下,每50個使用者開啟一個程序mmdrv.exe;controller場景執行結束,程序mmdrv.exe也會相應結束;

2. 按程序執行VUSER,系統為每1個使用者開啟一個程序mmdrv.exe;controller場景執行結束,程序mmdrv.exe也會相應結束;

3. 在Runtime setting中設定為按執行緒執行VUSER,設定Controller中的虛擬使用者數小於等於50的話,開啟windows資源管理器可以看到有一個程序mmdrv.exe; 設定Controller中的虛擬使用者數在51與100之間的話,開啟windows資源管理器可以看到有兩個程序mmdrv.exe.

 

 

 

loadrunner controller將使用驅動程式mmdrv執行Vuser。使用者可以在controller的run-time setting中選擇Vuser的執行方式, 是多程序方式or多執行緒方式。

如果選擇以執行緒方式來執行虛擬使用者:

在場景設定時,“是單行指令碼,還是多行指令碼”會決定系統啟動的程序數的多少:

假設併發使用者設定為30,如果是單行30個使用者,系統只需啟動一個程序;

假設併發使用者設定為30,如果是多行,30行,每行一個使用者,系統就需要啟動30個程序;

如果選擇以程序方式來執行虛擬使用者:

那麼無論指令碼在場景組中怎麼設定,是單行多使用者還是多行少使用者方式,系統需要啟動的程序數是一定的,就是併發使用者的總數;

程序方式和執行緒方式的優缺點

如果選擇按照程序方式執行, 每個使用者都將啟動一個mmdrv程序,多個mmdrv程序會佔用大量記憶體及其他系統資源,這就限制了可以在任一負載生成器上執行的併發使用者數的數量,因為負載機的資源(記憶體及其他系統資源)是有限的。

如果選擇按照執行緒方式執行,在預設情況下,controller為每50個使用者僅啟動一個mmdrv程序,而每個使用者都按執行緒方式來執行,這些執行緒使用者將共享父程序的記憶體段,這就節省了大量記憶體空間,從而可以在一個負載生成器上執行更多的使用者。(如果選擇執行緒方式來執行使用者,每個程序中會多出幾個執行緒,例如是53個,多出來的程序可能是用於維護程序之間的執行的)

選擇執行緒方式雖然可以減少啟動的mmdrv程序數,減少了記憶體的佔用,但是也容易出現一個問題,例如,同一個測試場景,用執行緒併發就會出現超時失敗或報 錯,而用程序併發就沒錯。為什麼呢?因為執行緒的資源是從程序資源中分配出來的,因此同一個程序中的多個執行緒會有共享的記憶體空間,假設a執行緒要用資源就必須 等待b執行緒釋放,而b執行緒也在等待其他資源釋放才能繼續,這樣就會出現這個問題。

系統需要啟動的mmdrv程序數與哪些因素有關:

與在controller 的執行時設定中選擇的是程序方式or執行緒方式來執行虛擬使用者有關

程序方式:無論是單行or多行指令碼,需要啟動的程序數就是併發使用者數;

執行緒方式:假設是單行指令碼,每50個使用者才啟動一個程序;多行指令碼,有幾行(每行<50人)就啟動幾個程序,而不是每個使用者啟動一個程序。

如果選擇了執行緒方式,需啟動的程序數,進一步還與指令碼是單行還是多行有關

單行指令碼,多使用者,假設少於50,只需啟動一個程序,100個使用者,只需啟動2個程序,依此類推;

多行指令碼,即使每行一個使用者,也需要啟動一個程序,多一行就需要多啟動一個程序;不是每個使用者啟動一個程序,有幾行(每行<50人)就需要啟動幾個程序。

在啟動了IP欺騙功能後,所需啟動的程序數,還與選擇的是按程序還是按執行緒來分配IP地址有關

按程序分IP:每個ip(負載生成器)就需要多啟動一個程序;

按執行緒分IP:每個ip(負載生成器)不需要多啟動一個程序。

 

 

Loadrunner 關於程序和執行緒的設定

    虛擬使用者已執行緒還是程序的方式執行,對被測伺服器的壓力是完全不同的,首先我們要知道在loadrunner中有3個地方涉及到虛擬使用者的執行方式,分別是:

1、在Vug->run-time settings->miscellane->multithreading中可以設定虛擬使用者是以執行緒還是程序的方式執行

2、在controller中設定場景時,是以單場景模式執行還是以場景組方式執行,在這兩種不同的執行方式下,虛擬使用者的執行方式也是不同的

3、在controller中使用IP欺騙時,在專家模式下的tools->options->general->multiple IP address mode中也可以選擇每個IP是以執行緒還是程序方式執行

 

下面我們介紹一下這三個設定執行緒和程序之間的關係:

首先說一下run-time settings中的設定與controller中單場景和場景組的關係:

要記住虛擬使用者是以執行緒還是程序方式執行是在Vug->run-time settings中設定的;

其次在controller中如果使用單場景執行,那麼該場景中無論有多少個指令碼、多少個負載生成器,執行這些指令碼的虛擬使用者均依照Vug->run-time settings中設定的執行緒還是程序方式執行;但是如果在controller中如果以場景組方式執行時,每個場景組均會作為一個程序被啟動,而每個組中的使用者又是按照Vug->run-time settings中設定的執行緒還是程序方式執行。

 

再說一下在controller中使用IP欺騙時,在專家模式下的tools->options->general->multiple IP address mode中的設定:

如果選擇的是程序方式:

1、如果這個ip是在單場景中,那麼有幾個不同的ip的負載生成器就會啟動幾個程序,每個負載生成器的虛擬使用者的執行方式仍然按照Vug->run-time settings中設定的執行緒還是程序方式執行

2、如果是在場景組中執行,這就要看場景組是如何設定的了,有兩種情況:

a、每個場景組中新增一個虛擬ip,這時執行每個場景組時只啟動一個程序 b、每個場景組中新增多個虛擬ip,這時執行每個場景組時,每個場景組啟動一個程序,每個ip啟動一個程序,每個ip的虛擬使用者的執行方式按照Vug->run-time settings中設定的執行緒還是程序方式執行

 

如果在controller中使用IP欺騙時,在專家模式下的tools->options->general->multiple IP address mode中選擇的執行緒方式: 1、如果這個ip是在單場景中,那麼對於不同的ip的負載生成器只會啟動一個程序,每個負載生成器的虛擬使用者的執行方式仍然按照Vug->run-time settings中設定的執行緒還是程序方式執行2、如果是在場景組中執行,每個場景組啟動一個程序,所有ip已執行緒的方式在組程序中執行,每個ip的虛擬使用者的執行方式按照Vug->run-time settings中設定的執行緒還是程序方式執行

 

 

LoadRunner中的多程序和多執行緒

 

Loadrunner支援多執行緒環境,使用多執行緒的方法能使每臺負載生成器執行更多的VU,但是隻有支援執行緒安全的協議,才能使用Loadrunner的VU併發方式。

以下協議不能支援執行緒併發

Sybase-Dblib,Infomix,Tuxedo,and PeopleSoft-Tuxedo

當使用程序併發是,在工作管理員中有mdrv.exe的程序,比如下圖,用10個VU使用者併發,就會在工作管理員中出現10個mmdrv程序

LoadRunner中的多程序和多執行緒  

如果以多執行緒方式併發,只會出現一個mmdrv程序,一個程序可以支援50VU的執行緒併發。

Loadrunner的參考幫助還說明了,如果採用多執行緒方式併發,Load Generator將會比多程序支援更多的使用者,具體的一個VU佔用記憶體的取值根據Loadrunner的版本不同而不同。