我創建了一個帶有 2 個執行緒組的 JMeter 腳本。一個不斷將多條訊息放在 IBM MQ 佇列 1 上,然后仍在運行時,另一個從另一個 IBM MQ 佇列 2 獲取并使用對這些訊息中的每一個的回應。
目的是生成負載并測量所有訊息的回應時間。為此,為了同步執行緒,我使用執行緒間通信插件將每個訊息的 JMScorrelationID 從在 queue1(生產者)上操作的執行緒傳遞到 queue2(消費者)上的執行緒操作。為此,我使用帶有常規代碼的 JSR223 采樣器和這兩個庫:
javax.jms-api-2.0.1
com.ibm.mq.allclient-9.2.0.2
要將訊息放在 queue1 上,我主要使用以下方法:
javax.jms.Session.createProducer(destinationInboundQueue)
//code to create some text payload
javax.jms.TextMessage.createTextMessage(payload)
javax.jms.MessageProducer.send(aboveMessage)
為了使用 queue2 的回應訊息,我主要使用以下方法:
javax.jms.Session.createConsumer(destination, "JMSCorrelationID='" queue1MessageId "'" )
javax.jms.MessageConsumer.receive(10000)
起初它似乎作業正常,但問題是我運行腳本的時間越長,即使給定的負載恒定,隨著時間的推移它占用的 RAM 越多。我可以在 Windows 任務管理器中看到這一點 - “Java(TM) Platform Se 二進制檔案”下的記憶體使用量隨著時間的推移以穩定的速度增加。在某些時候,我接近 90% 的記憶體,我認為這是錯誤開始發生的時候。此外,似乎我運行腳本的時間越長,Jmeter 花費的時間就越多從佇列中消耗目標訊息 - 這可能是記憶體使用量增加的副作用。我認為這是不正常的。
我已經查看了代碼,但我無法弄清楚這是什么原因。
如果有人知道,我想知道(在 Jmeter 中),我如何除錯和隔離我的 groovy 腳本中的哪個部分導致 ram 隨著時間的推移被填滿。
提前致謝。
uj5u.com熱心網友回復:
聽起來像典型的記憶體泄漏,如果沒有看到完整的代碼,很難說到底在哪里,很可能不是關閉的連接或物件積累資料,而不是垃圾收集的主題或導致腳本編譯和類加載的代碼問題通過每次迭代的每個執行緒。
只有分析器工具可以為您提供答案。
一種解決方法是分布式測驗
并確保遵循JMeter 最佳實踐
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/379807.html
