我有以下 JMeter 背景關系:
在一個并發執行緒組 1 中,我有一個 JSR223 采樣器,它將請求訊息發送到 MQ queue1 并始終獲取 JMSMessageID 和一個 epochTimestamp(派生自 JMS_IBM_PutDate JMS_IBM_PutTime)并將它們放入一個變數中。在這個采樣器下面是一個執行緒間通信后處理器元素,它從這個變數中獲取資料并將其放入一個 FIFO 佇列。
在另一個并發執行緒組 2 中,我有另一個帶有代碼的 JSR223 采樣器,用于從 MQ 佇列 2 獲取在 MQ 佇列 1 上發送的所有訊息的回應訊息。為此,在 JSR223 采樣器執行之前(并能夠計算每條訊息的回應時間),我使用執行緒間通信前處理器元素,它從 FIFO 佇列中獲取訊息 ID 和時間戳(60 秒超時)和將其傳遞給一個變數,JSR223 采樣器可以使用該變數來計算每條訊息的請求-回應時間。
我想對系統進行壓力測驗,這就是為什么我在兩個執行緒組中每 1 分鐘(用于腳本測驗目的)逐漸動態增加每秒請求數,如下所示:
我tstFeedback為此使用了并發執行緒組的功能:
${__tstFeedback(ThroughputShapingTimerIn,1,1000,10)}
我的問題是這樣的:
當我逐漸增加所需的 TPS 負載時,在前 4 個目標 TPS 步驟中,消費者執行緒與生產者執行緒保持同步(同步),但隨著時間的推移和負載的增加,消費者執行緒似乎需要更多時間來尋找并消費訊息。盡管兩個執行緒組具有相同的負載模式,但消費者執行緒的負載似乎不再能夠跟上生產者執行緒的負載。這最終會導致保持回應訊息的 queue2 變滿。這是我的意思的直觀表示:
消費者樣本最終比生產者樣本少得多。我的期望是它們應該或多或少相等......

我需要了解如何除錯此腳本并找出原因:
- 我認為在執行緒間同步級別會發生一些事情,因為有時我會從 FIFO 佇列獲取空值到消費者執行緒中 - 我需要了解放入該 FIFO 佇列的內容以及從該 FIFO 佇列中取出的內容。如何在每次迭代時列印 FIFO 串列中存在的內容?
- 有沒有人對導致這種行為的原因以及如何減輕這種行為有任何建議?
非常感謝任何幫助/建議。
uj5u.com熱心網友回復:
首先看看


或者,我的期望是,像您這樣的 Groovy 專家在 Groovy 代碼中列印佇列項應該不會有任何問題:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/382671.html
上一篇:執行緒池無法處理大量任務
下一篇:多執行緒沒有阻塞方法的類
