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

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

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

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

Senario 1

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

亲参数:

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

  • 同一台机器试图击败自己
  • 基准测试会降低实际性能
  • Senario 2

    远程机器测试另一个系统:

    亲参数:

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

  • 生产系统不会是一个理想的环境
  • 网络可能会减慢结果
  • 首先我想知道哪个更好。 其次,如果某些参数无效。 或者最终它甚至不重要。 我想知道这两种变体的其他参数。 我希望这个问题不会结束,因为我认为这不是一般的。 一种选择必须是更好的选择。


    情景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内存设置。 在大多数情况下,这些配置不适用于应用程序服务器。

    希望有帮助,请让我知道,如果我可以进一步阐述, - 地址

    链接地址: http://www.djcxy.com/p/86525.html

    上一篇: Which is the better benchmarking strategy: local machine vs remote machine

    下一篇: 32 OR 64 BIT for the JVM?