加载/压力测试Java应用程序

时间:2013-10-10 19:01:33

标签: java multithreading thread-safety stress

所有

我们有一个基于HTTP Servlets,EJB和POJO构建的Java应用程序。客户端使用HTTPServlet访问应用程序,应用程序使用Web服务。

我需要对此应用程序进行压力测试,以测试负载,线程安全性和响应时间 使用HTTPURLConnection API和JAXB api来使用Web服务。

由于JAXB编组/解组有线程安全问题需要加载测试和线程安全

通过指定事务数和没有线程,我看到了应用程序负载测试。我想对我的应用程序做同样的事情

任何建议都值得赞赏

3 个答案:

答案 0 :(得分:1)

使用Apache JMeter

  

Apache JMeter™桌面应用程序是开源软件,是一种100%纯Java应用程序,旨在加载测试功能行为并测量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。

答案 1 :(得分:1)

Apache JMeter™Grinder进行比较后,由于用于创建测试计划的GUI,我选择了JMeter。学习曲线平坦 - 很容易创建简单的场景。

如果您对jython中的测试计划感到满意,那些工具似乎非常接近。两者

  • 拥有运行和协调分布式测试的GUI(必须进行压力测试)
  • 可以为进一步的分析创建text / xml报告
  • 有内置报告插件

关注链接how-to-get-my-website-load-test-with-jmeter,了解有关jMeter中压力测试的链接以及更好的插件,以显示结果。

我在使用大型数据集的默认图形插件时遇到了性能问题(> 100.000条目)。请关注Suggestions and Recipes for Log Analysis,了解如何为此类数据量生成图表

答案 2 :(得分:1)

是的,您可以使用JMeter来测试响应时间,但我怀疑您是否会通过使用JMeter找到所有并发问题。 JMeter可以很好地负载测试应用程序,但请记住:

1确保您的测试正在复制您的实际用例。

  1. 您没有在同一个盒子上运行应用程序和JMeter。

  2. 您正在使用现实的新数据和现有数据。

  3. 编写并发测试可能非常棘手。一个更好的方法可以是非常仔细地检查使用已知不安全类的代码。例如,解决JAXB的问题可能是使用局部变量在每个请求处理程序上创建一个新的Unmarashaller。

    例如

     public void handler(HttpServletRequest req) {
        Unmarshaller u = context.createUnmarshaller();
        u.unmarshal(...);
    }
    

    显然这有性能问题所以如果可能的话,最好使用不同的库。如果部署非线程安全的代码,则更有可能遇到非常难以重现的错误。

    如果您确实希望编写并发集成测试,那么请事先阅读第12章“在实践中使用Java并发性测试并发程序”,因为编写好的测试比您想象的要困难得多。