LoadRunner中進(jìn)程運行和線程運行區(qū)別
LoadRunner controller將使用驅(qū)動程序mmdrv運行Vuser。用戶可以在controller的run-time setting中選擇Vuser的運行方式, 是多進(jìn)程方式or多線程方式。
如果選擇以線程方式來運行虛擬用戶:
在場景設(shè)置時,“是單行腳本,還是多行腳本”會決定系統(tǒng)啟動的進(jìn)程數(shù)的多少: 假設(shè)并發(fā)用戶設(shè)置為30,如果是單行30個用戶,系統(tǒng)只需啟動一個進(jìn)程; 假設(shè)并發(fā)用戶設(shè)置為30,如果是多行,30行,每行一個用戶,系統(tǒng)就需要啟動30個進(jìn)程;
如果選擇以線程程方式來運行虛擬用戶:
那么無論腳本在場景組中怎么設(shè)置,是單行多用戶還是多行少用戶方式,系統(tǒng)需要啟動的進(jìn)程數(shù)是一定的,就是并發(fā)用戶的總數(shù);
進(jìn)程方式和線程方式的優(yōu)缺點:
如果選擇按照進(jìn)程方式運行,每個用戶都將啟動一個mmdrv進(jìn)程,多個mmdrv進(jìn)程會占用大量內(nèi)存及其他系統(tǒng)資源,這就限制了可以在任一負(fù)載生成器上運行的并發(fā)用戶數(shù)的數(shù)量,因為負(fù)載機(jī)的資源(內(nèi)存及其他系統(tǒng)資源)是有限的。 如果選擇按照線程方式運行,在默認(rèn)情況下,controller為每50個用戶僅啟動一個mmdrv進(jìn)程,而每個用戶都按線程方式來運行,這些線程用戶將共享父進(jìn)程的內(nèi)存段,這就節(jié)省了大量內(nèi)存空間,從而可以在一個負(fù)載生成器上運行更多的用戶。(如果選擇線程方式來運行用戶,每個進(jìn)程中會多出幾個線程,例如是53個,多出來的進(jìn)程可能是用于維護(hù)進(jìn)程之間的運行的) 選擇線程方式雖然可以減少啟動的mmdrv進(jìn)程數(shù),減少了內(nèi)存的占用,但是也容易出現(xiàn)一個問題,例如,同一個測試場景,用線程并發(fā)就會出現(xiàn)超時失敗或報錯,而用進(jìn)程并發(fā)就沒錯。為什么呢?因為線程的資源是從進(jìn)程資源中分配出來的,因此同一個進(jìn)程中的多個線程會有共享的內(nèi)存空間,假設(shè)a線程要用資源就必須等待b線程釋放,而b線程也在等待其他資源釋放才能繼續(xù),這樣就會出現(xiàn)這個問題。
系統(tǒng)需要啟動的mmdrv進(jìn)程數(shù)與哪些因素有關(guān):
與在controller 的運行時設(shè)置中選擇的是進(jìn)程方式or線程方式來運行虛擬用戶有關(guān) 進(jìn)程方式:無論是單行or多行腳本,需要啟動的進(jìn)程數(shù)就是并發(fā)用戶數(shù); 線程方式:假設(shè)是單行腳本,每50個用戶才啟動一個進(jìn)程;多行腳本,有幾行(每行<50人)就啟動幾個進(jìn)程,而不是每個用戶啟動一個進(jìn)程。 如果選擇了線程方式,需啟動的進(jìn)程數(shù),進(jìn)一步還與腳本是單行還是多行有關(guān) 單行腳本,多用戶,假設(shè)少于50,只需啟動一個進(jìn)程,100個用戶,只需啟動2個進(jìn)程,依此類推; 多行腳本,即使每行一個用戶,也需要啟動一個進(jìn)程,多一行就需要多啟動一個進(jìn)程;不是每個用戶啟動一個進(jìn)程,有幾行(每行<50人)就需要啟動幾個進(jìn)程。 在啟動了IP欺騙功能后,所需啟動的進(jìn)程數(shù),還與選擇的是按進(jìn)程還是按線程來分配IP地址有關(guān) 按進(jìn)程分IP:每個ip(負(fù)載生成器)就需要多啟動一個進(jìn)程; 按線程分IP:每個ip(負(fù)載生成器)不需要多啟動一個進(jìn)程。
posted on 2012-05-24 09:27 順其自然EVO 閱讀(772) 評論(0) 編輯 收藏 所屬分類: loadrunner 、性能測試