jmeter多用户问题

时间:2010-01-08 14:27:22

标签: php performance apache2 jmeter

我们正在使用Jmeter来测试在Apache 2 Web服务器上运行的Php应用程序。我可以加载Jmeter以使用25或50个线程,并且服务器上的负载不会增加,但服务器的响应时间会增加。线程越多,响应时间越慢。似乎Jmeter或Apache正在排队请求。我已经更改了apache web服务器配置文件中的maxclients值,但这不会改变问题。当Jmeter运行时,我可以使用该应用程序并获得可观的响应时间。是什么赋予了?我希望通过增加线程数可以将我的服务器降低到0%空闲。任何人都可以帮助我指出正确的方向吗?

更新:我发现如果从我的应用程序中删除会话,我就可以模拟服务器上的满载。我尝试重新启用会话并为每个线程使用HTTP Cookie管理器,但它似乎没有产生影响。

3 个答案:

答案 0 :(得分:3)

您需要确定瓶颈发生的位置,然后尝试修复问题。

  • JMeter客户端应该在装备精良的机器上运行。我更喜欢运行JVM的Solaris / Unix服务器,但对于< 200线程,现代的Windows机器就可以了。 JMeter可能会成为一个瓶颈,一旦这样做,你就不会得到任何有意义的结果。此外,它应该在一台单独的机器上运行,以便在您的测试中运行,并且最好在同一网络上运行。如果您的测试装备和服务器相距甚远,则WAN延迟可能会成为一个问题。
  • 要检查的第二件事是你的Apache工作人员。 Apache有一个模块 - mod_status - 它将显示每个worker的状态。您的池大小设置得太低是可能的。从mod_status中,您将能够看到正在使用的工作人员数量。很少,Apache将没有任何工作人员来处理请求,并且请求将排队。太多了,Apache可能耗尽它正在运行的盒子上的内存。
  • 接下来,您应该检查您的数据库。如果它位于单独的计算机上,则数据库可能存在IO或CPU短缺。
  • 如果您遇到瓶颈,并且服务器和数据库位于同一台计算机上,您通常会达到CPU,RAM或IO限制。我按照最容易识别的顺序列出了那些。如果你有一个CPU绑定应用程序,你可以很容易地看到你的CPU使用率达到100%。如果RAM用完,您的机器将开始交换。在Windows和unix上,很容易看到可用的RAM。最后,您可能受到IO约束。这也可以使用各种工具或统计数据进行监控,但它并不像CPU那么明显。

最后,特别针对您的问题,突出的一点是,可以将大量会话文件存储在单个目录中。 PHP经常将会话信息存储在文件中。如果此目录变大,PHP将花费越来越长的时间来查找会话。如果您运行测试将关闭cookie,PHP应用程序可能已为每个用户请求创建了数千个会话文件。在Windows服务器上,它将比在unix服务器上更快地减速,在两个操作系统上存储目录的方式存在差异。

答案 1 :(得分:2)

您使用的是恒定吞吐量计时器吗?如果Jmeter无法使用分配给它的线程来服务吞吐量,您将在响应时间内看到此排队和井喷。要确定这是否是问题,请尝试添加更多线程。

当脚本中有javascript调用时,我也发现了这种情况的报告。在这种情况下,尝试将javascript调用移动到脚本顶部的测试计划元素,或者寻找预先计算值的方法。

答案 2 :(得分:0)

尝试检查由apache提供的静态文件,而不是PHP,以查看问题是在Apache配置还是PHP配置中。

同时检查您的网络连接和配置。我们的JMeter测试进展顺利,直到碰壁。最终意识到我们只有一个100Mb的连接而且它已经饱和,将千兆位修复它。您的网卡或交换机可能以低于您的速度运行,尤其是当它们的速度设置为“自动”时。