2011-08-15 33 views
3

我在JUnit套件中進行了一次測試,它警告我性能下降。測試的工作原理如下:通常,我可以每秒運行100000次操作,但構建服務器上的負載可能會有所不同,所以我對任何大於25'000的任何事情感到滿意。負載變化的機器運行性能測試

今天,構建失敗,24'300 ops/s。當我用Java 7(rc1,調試風格)運行測試時,我得到了5'000 ops/s。前者是好的,後者是測試必須抓住的紅旗。現在

簡單的解決辦法是我的目標減少20'000,但我不知道是否有更好的方法來定義性能測試的「安全範圍」如果機器能夠在負載下。

+0

你就不能改變基於服務器的平均負載的門檻,讓他們的執行時間? – Mikaveli

+0

是的,但我該怎麼做? –

+0

根據您的構建服務器在哪個平臺上運行,獲取'uptime'(Linux)或同等產品的輸出。使用ThreadMXBean的 – Mikaveli

回答

0

而不是測量掛鐘時間,測量經由ThreadMXBean CPU時間。如果您希望支持每秒50k ops,那麼每個操作應該花費20000納秒。

我不知道垃圾回收器線程是否可以通過這個bean訪問。如果沒有,則需要通過GarbageCollectorMXBean

+0

是一個絕妙的主意! –

1

我會運行測試一次以上(例如採取11項結果,檢查中位數,這與忽略性能突然驟降),或在一段較長的時間,所以你可以得到更一致的結果。如果您無法控制服務器的負載,則可以在unix框中獲取負載,並在確定合理的範圍時考慮這一點。

1

純粹的操作/圖形是孤立無意義的。如果機器上的負載可能導致5倍差異(100k下降到20k),那麼我確實可以屏蔽應用程序行爲中相當重大的變化。

我覺得你的反覆測試性能變化的理念是一個值得稱道的想法,但我只是不明白如何實現這一點,除非你有一個可靠的平臺。

我想你可以嘗試測量平臺整體利用率並相應地調整你的測試結果,但一個可靠的模型肯定會採取發展的相當多。

相關問題