哪个是更好的基准测试策略:本地机器与远程机器

时间:2015-04-03 18:07:52

标签: jmeter benchmarking

今天我讨论的是更好的基准测试策略:本地机器与远程机器。我想知道关于该主题的其他一些意见。这是更普遍的问题,但在这种情况下,它是一个java项目。

测试是关于一些模板引擎的表现。 在30秒的预热阶段之后,基准测试以100个线程运行120秒。

测试页面有一些静态和动态部分。就像表和列表中的随机项一样,但是例如静态头(没有数据库操作)。

Senario 1

网络服务器和基准测试工具在同一台机器上运行。 测试是用ab和jmeter进行的。

专业论据:

  • 制作也不是一个理想的制度。
  • 其他java进程也可以在生产系统上运行。
  • 即使基准测试工具平均减慢结果,结果仍然有效(更好的技术在任何变体上都会更好)

Con论点:

  • 同一台机器试图打败自己
  • 基准测试降低了实际效果

Senario 2

远程计算机测试另一个系统:

专业论据:

  • 一个系统可以尝试达到另一个系统的限制
  • 基准测试(jmeter)不在同一个jvm上运行

Con论点:

  • 生产系统不是理想的环境
  • 网络可能会降低结果的速度

首先,我想知道哪种方式更好。其次,如果某些参数无效。或者最终它甚至不重要。我想知道两种变体的其他论点。我希望这个问题不会被关闭,因为我认为这不是一般性的。一个选项必须是更好的选择。

1 个答案:

答案 0 :(得分:1)

在几乎所有情况下,情景2都将更接近生产行为。我认为,为场景1列出的缺点有效地使任何结果无效。但是,只要您与该方法保持一致,即使它们与您希望从生产中看到的不匹配,您也应该能够使用结果进行比较。

解决方案2的缺点:

  • 生产系统不是理想的环境。

如果您要加载测试生产,那么开始时就会出现其他问题。

  • 网络可能会减慢结果。

虽然这可能是真的,但分布式内部测试环境的网络仍然优于客户从外部源获得的网络。几乎在所有情况下,您都需要进行带宽网络模拟,以确保类似生产的行为。

要完成此操作,请在jmeter.properties文件中查找以下行:

# Define characters per second > 0 to emulate slow connections
#httpclient.socket.http.cps=0
#httpclient.socket.https.cps=0

这将限制"带宽"每个JMeter线程。 (引用,因为限制不会发生在网络级别)做一个简单的研究,看看CPS对你的应用程序意味着什么。


简答:

始终尝试在分布式设置中进行测试,因为您具有更大的灵活性。此外,请考虑您需要多台负载生成器计算机来实际对目标施加压力的情况。在那种情况下,你根本没有选择,所以我认为"最佳实践"是使用单独的负载生成器机器配置隔离的测试环境。

此外,为了有效地最大化每个负载生成器计算机的输出,建议为负载生成器计算机自定义打开文件描述符限制(ulimits)和JVM内存设置。在大多数情况下,这些配置对于应用程序服务器是不可接受的。

希望有所帮助,如果我能进一步详细说明,请告诉我, -Addled