2012-05-31 79 views
3

我正在測試啓動restlet的應用程序,當http請求到達restlet,啓動新線程並處理請求時,應用程序創建一個新對象並存儲在Map中( 對於我正在使用Jmeter的壓力測試,我看到java進程內存的問題,我不知道問題是堆,堆棧還是其他,讓我們來看看問題:java壓力測試和內存

我啓動幾次同樣的情況下,首先運行我的項目(當然有空緩存):

  1. 500個線程 - >線程的時間平均值爲1900毫秒
  2. 500螺紋 - >線程的時間平均爲600毫秒
  3. 500螺紋 - >線程的時間平均爲598毫秒
  4. 500線程 - >的線程的時間平均值是670毫秒 ....

正如你所見,我的問題是第一次執行比其他執行時間要長得多。每個線程都存儲在一個Map中的即時對象,並且當它爲空時,看起來工作非常緩慢。任何人有任何想法誰可能會去?我試圖增加jvm的堆啓動內存,但不起作用。 也如果有人知道任何可以閱讀,以幫助我感謝它的參考

謝謝。

回答

4

我懷疑你的JVM在第一次執行時沒有預熱。嘗試添加-XX:+PrintCompilation以查看代碼是否在第一次測試中編譯,但不是第二次。

+1

感謝彼得,我加這個參數,我獲得非常有趣的結果,現在我必須學習在G。我也嘗試參數化jvm,加入-Xmn100M -Xms500M -Xmx500M,結果更好,更有意義 – Kalamarico

2

在對Java應用程序進行性能測試時,您必須始終確保JVM有時間「預熱」。這是由於優化了現代JVM(例如Oracle的HotSpot JVM在代碼運行時產生的)。

爲了獲得有意義的結果,您需要運行足夠的測試用例以便在給定配置/ 。負載

參見:

http://stuq.nl/weblog/2009-01-28/why-many-java-performance-tests-are-wrong

http://buytaert.net/files/oopsla07-georges.pdf

+2

感謝鏈接Malcom,它們非常有趣! – Kalamarico