2008-11-26 116 views
0

我有一个Web服务,我试图加载测试。我创建了一个程序,它产生线程来模拟连接到服务和发出请求的多个用户。每个线程在它死亡之前都会产生“一定数量”的请求。每一个新请求都会在准备就绪后立即完成 - 在获得响应和发出下一个请求之间几乎没有任何延迟。被测试的Web服务在同一台服务器上调用另一个Web服务。Http Web服务负载测试

这个过程似乎可以正常工作到90个模拟用户。但是,一旦我尝试了100个模拟用户,程序就会在大约6次处理请求后挂起。他们似乎没有做任何事情。模拟客户端挂起等待响应,Web服务未收到请求。它需要服务器重新启动才能恢复。

这是怎么回事?我可以对服务器进行连接的数量是否有限制?我应该尝试“加大”负载(现在我只是尽可能快地发射它们)?

我正在使用我们的服务器Java Caps 5.1.3应用程序服务器和我用来使请求的库是HttpUnit 1.6.2。


后续问题 什么的加速时间有什么好处?为什么我无法在测试开始时将所有负载都推送到服务器?

回答

2

看到这种情况可能有多种原因,您可以尝试下面的方法来找出原因。希望他们帮助:

1.使用斜坡上升

使用一个体面的斜升说ATLEAST 1USER/2秒等。如果使用Ramp-up解决了您的问题,那么它肯定是一个连接计数问题。

2.代码审查

彻底检查在某些情况下,你已经写了负载注入代码,unexited循环/线程。

您还可以使用分析工具,例如JENSOR找出哪个方法进入死锁并导致服务器无响应。


此外,检查你的web服务器上的这些参数和调整它们和测试

  • MaxThreads
  • 进程数
  • MaxSessionCount

Answer for Follow-up Question

加速模拟真实场景,同时为Web服务器提供呼吸空间。在进行负载测试时,模式应该与真实生活相似,以获得准确和可扩展的预测。

这在这样发挥的最重要的部分参数如下:

  • 斜坡上升
  • 思考时间
  • 起搏的B/W迭代
  • 事务混合
  • 号并发用户
1

我想你应该尝试使用JMeter负载测试。它有所有的加速的东西。 This PPT presentation比较这两个,所以你可以看到哪个更适合你。

2

回答后续问题

斜升模拟现实生活场景,并在同一时间提供了一个喘息的Web服务器。在进行负载测试时,模式应该与真实生活相似,以获得准确和可扩展的预测。

这在这样发挥的最重要的部分参数如下:

  • 斜坡上升
  • 思考时间
  • 起搏的B/W迭代
  • 事务混合
  • 号并发用户