2013-09-23 86 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