2013-09-23 89 views
9

單獨使用單元測試很難找到Java應用程序中的所有瓶頸,死鎖和內存泄漏。性能/壓力測試Java EE應用程序

我想爲我的應用程序添加一些級別的壓力測試。我想測試應用程序的限制並確定它在高負載下如何反應。

我想衡量以下幾點:

  • 有效性的影響高負荷下
  • 高負載下的性能
  • 內存/ CPU高負載下/磁盤使用
  • 是否在高崩潰加載或優雅地反應

在標準下測量和對比這些特徵也很有趣負載。

是他們衆所周知的解決壓力測試的標準技術。 我正在尋找幫助/指導建立這樣的環境。 理想情況下,我想定期運行這些測試,以便我們確定最近的交付是否會影響性能。

+2

我會推薦Apache JMeter http://jmeter.apache.org/作爲一款優秀的Web應用程序壓力測試工具。它很容易使用,也可以擴展。 – Rami

+0

我發現加特林(http://gatling.io)也是一個很好的工具。 – cmd

回答

0

主要有兩種方法進行性能上的應用程序:

性能測試和系統測試

它們有什麼不同?好吧,這很容易,它基於他們的範圍,性能測試的範圍是有限的,並且是非常不切實際的。示例:測試某些App X上的IncomingMessage處理程序,爲此,您將設置一個測試,以X,Y,Z爲基礎向此處理程序發送meesages。這種方法將幫助您確定問題並衡量應用程序中個別和有限區域的性能。

所以,現在應該把你的問題,所以我該基準測試和性能測試的每一個部件在我的應用程序單獨?是的,如果您認爲組件的行爲非常重要,並且更新版本的更改可能會導致性能損失。但是,如果您希望整體瞭解應用程序,那麼大量組件會相互交互並查看性能如何顯示,然後您需要進行系統測試。

的系統測試將一如既往地試圖複製儘可能靠近任何客戶的生產環境。在這裏,您可以觀察真實世界對應用性能的感受,並採取相應的行動來糾正它。

因此,作爲結論,建立在你的應用系統的測試和測量你說什麼你想衡量。然後強調整個系統,看看它是如何反應的,你會對結果感到驚訝。

最後,性能測試單獨的任何關鍵部件你已經確定或想保持你的應用程序跟蹤。

作爲一般原則,在做性能時,應該始終: 1.-獲取系統的基線上的空閒狀態。 2.-在正常的預期負荷下獲得系統的基線。 3.-在壓力條件下獲得系統的基線。

請記住,正常負載結果應該外推到壓力條件,而一個好的系統將永遠是一個線性伸縮的系統。

希望這會有所幫助。

P.S.測試,環境設置,甚至數據收集應該儘可能完全自動化,這將幫助您在此基礎上運行,並花時間診斷性能問題,而不是設置測試。

5

我是JMeter的忠實粉絲。您可以直接在服務器上設置調用,就像用戶訪問它一樣。您可以控制用戶(併發線程)和訪問的數量。它可以遵循一個工作流程,抓取相關信息頁面。需要花費1到2天的時間才能充分發揮其生產力。 (您可以在下載後的一個小時內完成基本操作!)

至於看到所有對服務器的影響如何,這是一個更加棘手的問題。我使用了CA和IBM的專業工具。 (我在特定工具名稱上畫空白 - 可能是由於PTSD!)我使用了開箱即用的JVM分析器。我已經使用了原生的linux和windows工具。如果您不太在意分析應用程序的哪些部分會導致問題,那麼您可以使用本機工具來監視CPU /內存/ IO。

+0

關於「在正常負載下測量和對比這些特性也很有趣。」我會邀請您檢查指標:http://metrics.dropwizard.io/3.1.0/ – lrn2prgrm