1. 程式人生 > >JMeter之Ramp-up Period(in seconds)說明

JMeter之Ramp-up Period(in seconds)說明

都在 一個 個人 read bin ogl 周期 而是 執行時間

Ramp-up Period(in seconds)

【1】決定多長時間啟動所有線程。如果使用10個線程,ramp-up period是100秒,那麽JMeter用100秒使所有10個線程啟動並運行。每個線程會在上一個線程啟動後10秒(100/10)啟動。Ramp-up需要要充足長以避免在啟動測試時有一個太大的工作負載,並且要充足小以至於最後一個線程在第一個完成前啟動。 一般設置ramp-up=線程數啟動,並上下調整到所需的。

【2】用於告知JMeter 要在多長時間內建立全部的線程。默認值是0。如果未指定ramp-up period ,也就是說ramp-up period 為零, JMeter 將立即建立所有線程。假設ramp-up period 設置成T 秒, 全部線程數設置成N個, JMeter 將每隔T/N秒建立一個線程。

【3】Ramp-Up Period(in-seconds)代表隔多長時間執行,0代表同時並發

Delay Thread creation until needed

延遲創建線程,直到該線程開始采樣,即之後的任何線程組延遲和加速時間為線程本身。這樣可以支持更多的線程,但不會有太多是同時處於活動狀態。

調度器

選中調度器後,需要輸入啟動和結束時間。當測試啟動時,如果必須JMeter會等待啟動時間到達。在每個周期 結束,JMeter檢驗結束時間是否到達,如果是,運行停止,如果不是測試被允許繼續,直到叠代限制到達。

另外你可以使用啟動延遲和持續時間文本域。註意啟動延遲會覆蓋啟動時間,持續時間會覆蓋結束時間。

技術分享圖片

如何設置適當的值並不輕易。

首先,假如要使用大量線程的話,ramp-up period 一般不要設置成零。

因為假如設置成零,Jmeter將會在測試的開始就建立全部線程並立即發送訪問請求, 這樣一來就很輕易使服務器飽和,更重要的是會隱性地增加了負載,這就意味著服務器將可能過載,不是因為平均訪問率高而是因為所有線程的第一次並發訪問而引起的不正常的初始訪問峰值,可以通過Jmeter的聚合報告監聽器看到這種現象。
這種異常不是我們需要的,因此,確定一個合理的ramp-up period 的規則就是讓初始點擊率接近平均點擊率。當然,也許需要運行一些測試來確定合理訪問量。

  基於同樣的原因,過大的ramp-up period 也是不恰當的,因為將會降低訪問峰值的負載,換句話說,在一些線程還未啟動時,初期啟動的部分線程可能已經結束了。

  那麽,如何檢驗ramp-up period I太小了或者太大了呢?首先,初始的ramp-up period=平均點擊率並用總線程/點擊率。 例如,假設線程數為100, 估計的點擊率為每秒10次, 那麽估計的理想ramp-up period 就是 100/10 = 10 秒。 那麽,應怎樣來提出一個合理的平均點擊率呢?沒有什麽好辦法,必須通過運行一次測試腳本來獲得。

  其次, 在測試計劃(test plan)中增加一個聚合報告監聽器,如圖2所示,其中包含了所有獨立的訪問請求(一個samplers)的平均點擊率。 第一次取樣的點擊率(如http請求)與ramp-up period 和線程數量密切相關。通過調整ramp-up period 可以使首次取樣的點擊率接近平均取樣的點擊率。

第三, 查驗一下Jmeter日誌(文件位置:JMeter_Home_Directory/bin) 的最後一個線程開始時第一個線程是否真正結束了,二者的時間差是否正常。

  總之,是否能確定一個適當的ramp-up time 取決於以下兩條規則:
  ·第一個取樣器的點擊率(hit rate)是否接近其他取樣器的平均值,從而能否避免ramp-up period 過小。
  ·在最後一個線程啟動時,第一個線程是否在真正結束了,最好二者的時間要盡可能的長,以避免ramp-up period過大。

  有時,這兩條規則的結論會互相沖突。 這就意味著無法找到同時滿足兩條規則的合適的ramp-up period。 糟糕的測試計劃通常會導致這些問題,這是因為在這樣的測試計劃裏,取樣器將不能充分地采集數據,可能因為測試計劃執行時間太短並且線程會很快的運行結束

假設:

線程數:n

Ramp-Up Period:T (有人稱之為啟動時間,有人說是準備時長,看個人喜好)

循環次數:a

若每個循環運行時間是 t

當時間到 S = (T- T/n)時,最後一個線程啟動,若要使所有線程同時運作,則需要在最後一個線程啟動的時候第一個線程仍未關閉,為達到這個要求,需滿足 a·t > S及a > S/t

每一個個線程運行時間既是R = a·t(此處的a是大於S/t的某一值),則第一個線程在時間點為R 的時候停止,整個測試理論運行時間則是 :S + R = (1-1/n)·T + a·t

總結:

測試中變量是 線程數 n ,每個循環時間 t 是個實踐值,循環次數 a 只是為了延長單個線程的運行時間,從而保證當最後一個線程啟動時,所有線程都在運行中,達到壓測效果。

以上是我個人的總結,額,什麽?看不懂!其實筆者寫完了也暈了,下面我們用確切的數值進行試驗

我們設置線程數 n = 5,循環次數a = 1000,請求www.google.com,得到聚合報告如圖:

技術分享圖片

圖中得到谷歌首頁的平均請求時間大約為t = 0.2秒

這裏,我們為了方便分析,將Ramp-Up Period 設置為T = 10秒(實際合理的時間後面會說明)

依然是n = 5,得到 S = (T- T/n) = 8 ,也就是說,從第一個線程啟動到第8秒的時候,最後一個線程開始啟動,若需要在最後一個線程啟動的時候第一個線程仍未關閉,則需要滿足 a·t > S ,已知S = 8,t = 0.2,得到 a > 40 。

OK,既然循環次數要大於40,我們不妨把循環設置成100,那麽單個線程運行時間就是R = a·t = 20秒,也就是說第一個線程會在第20秒的時候停止,整個測試的理論運行時間為 S + R = (1-1/n)·T + a·t = 28秒

我們用一張圖來直觀的看看每個線程的運行情況

技術分享圖片

從圖中可以得到從第8秒開始,到第20秒,5個線程同時在運行中,此時才是真正的模擬5個用戶同時並發

JMeter之Ramp-up Period(in seconds)說明