LoadRunner中進程運行和線程運行區別

LoadRunner中的進程與線程

 
 一、進程與線程的區別:
   
進程和線程的區別是什麼?
進程和線程都是由操做系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的併發性。進程和線程的區別在於:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程. 線程的劃分尺度小於進程,使得多線程程序的併發性高。
另外,進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程序的運行效率。
線程在執行過程當中與進程仍是有區別的。每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。可是線程不可以獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。但操做系統並無將多個線程看作多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。

進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位. 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源. 一個線程能夠建立和撤銷另外一個線程;同一個進程中的多個線程之間能夠併發執行.
 
二、按線程運行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。用戶能夠在controllerrun-time setting中選擇Vuser的運行方式, 是多進程方式or多線程方式。windows

若是選擇以線程方式來運行虛擬用戶:安全

在場景設置時,「是單行腳本,仍是多行腳本」會決定系統啓動的進程數的多少:服務器

假設併發用戶設置爲30,若是是單行30個用戶,系統只需啓動一個進程;多線程

假設併發用戶設置爲30,若是是多行,30行,每行一個用戶,系統就須要啓動30個進程;併發

若是選擇以進程方式來運行虛擬用戶:測試

那麼不管腳本在場景組中怎麼設置,是單行多用戶仍是多行少用戶方式,系統須要啓動的進程數是必定的,就是併發用戶的總數;spa

進程方式和線程方式的優缺點操作系統

若是選擇按照進程方式運行, 每一個用戶都將啓動一個mmdrv進程,多個mmdrv進程會佔用大量內存及其餘系統資源,這就限制了能夠在任一負載生成器上運行的併發用戶數的數量,由於負載機的資源(內存及其餘系統資源)是有限的。線程

若是選擇按照線程方式運行,在默認狀況下,controller爲每50個用戶僅啓動一個mmdrv進程,而每一個用戶都按線程方式來運行,這些線程用戶將共享父進程的內存段,這就節省了大量內存空間,從而能夠在一個負載生成器上運行更多的用戶。(若是選擇線程方式來運行用戶,每一個進程中會多出幾個線程,例如是53個,多出來的進程多是用於維護進程之間的運行的)code

選擇線程方式雖然能夠減小啓動的mmdrv進程數,減小了內存的佔用,可是也容易出現一個問題,例如,同一個測試場景,用線程併發就會出現超時失敗或報 錯,而用進程併發就沒錯。爲何呢?由於線程的資源是從進程資源中分配出來的,所以同一個進程中的多個線程會有共享的內存空間,假設a線程要用資源就必須 等待b線程釋放,而b線程也在等待其餘資源釋放才能繼續,這樣就會出現這個問題。

系統須要啓動的mmdrv進程數與哪些因素有關:

與在controller 的運行時設置中選擇的是進程方式or線程方式來運行虛擬用戶有關

進程方式:不管是單行or多行腳本,須要啓動的進程數就是併發用戶數;

線程方式:假設是單行腳本,每50個用戶才啓動一個進程;多行腳本,有幾行(每行<50人)就啓動幾個進程,而不是每一個用戶啓動一個進程。

若是選擇了線程方式,需啓動的進程數,進一步還與腳本是單行仍是多行有關

單行腳本,多用戶,假設少於50,只需啓動一個進程,100個用戶,只需啓動2個進程,依此類推;

多行腳本,即便每行一個用戶,也須要啓動一個進程,多一行就須要多啓動一個進程;不是每一個用戶啓動一個進程,有幾行(每行<50人)就須要啓動幾個進程。

在啓動了IP欺騙功能後,所需啓動的進程數,還與選擇的是按進程仍是按線程來分配IP地址有關

按進程分IP:每一個ip(負載生成器)就須要多啓動一個進程;

按線程分IP:每一個ip(負載生成器)不須要多啓動一個進程。

 

 

Loadrunner 關於進程和線程的設置

    虛擬用戶已線程仍是進程的方式運行,對被測服務器的壓力是徹底不一樣的,首先咱們要知道在loadrunner中有3個地方涉及到虛擬用戶的運行方式,分別是:

一、在Vug->run-time settings->miscellane->multithreading中能夠設置虛擬用戶是以線程仍是進程的方式運行

二、在controller中設置場景時,是以單場景模式運行仍是以場景組方式運行,在這兩種不一樣的運行方式下,虛擬用戶的運行方式也是不一樣的

三、在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中的設置:

若是選擇的是進程方式:

一、若是這個ip是在單場景中,那麼有幾個不一樣的ip的負載生成器就會啓動幾個進程,每一個負載生成器的虛擬用戶的運行方式仍然按照Vug->run-time settings中設置的線程仍是進程方式運行

二、若是是在場景組中運行,這就要看場景組是如何設置的了,有兩種狀況:

a、每一個場景組中添加一個虛擬ip,這時運行每一個場景組時只啓動一個進程 b、每一個場景組中添加多個虛擬ip,這時運行每一個場景組時,每一個場景組啓動一個進程,每一個ip啓動一個進程,每一個ip的虛擬用戶的運行方式按照Vug->run-time settings中設置的線程仍是進程方式運行

 

若是在controller中使用IP欺騙時,在專家模式下的tools->options->general->multiple IP address mode中選擇的線程方式: 一、若是這個ip是在單場景中,那麼對於不一樣的ip的負載生成器只會啓動一個進程,每一個負載生成器的虛擬用戶的運行方式仍然按照Vug->run-time settings中設置的線程仍是進程方式運行二、若是是在場景組中運行,每一個場景組啓動一個進程,全部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的版本不一樣而不一樣。

相關文章
相關標籤/搜索