【问题标题】:How to estimate the authntiaction time如何估计认证时间
【发布时间】:2019-12-04 06:49:51
【问题描述】:

我使用 java 设计了一个身份验证协议。我的台式计算机上单次身份验证的平均执行时间为 2.87 毫秒。我的电脑有以下规格。配备 1.99 GHz Intel Core i7 和 8GB RAM 的 Windows 10。

如果多个用户说 10 个用户同时执行身份验证。总计算时间是多少。我可以说(2.87 * 10)吗?

【问题讨论】:

  • 乘以 10?循环吗?
  • 不可能用这些信息来回答。我们甚至不知道究竟发生了什么以及它是如何扩展的。该代码也可以缩放二次而不是线性或只是常数,这取决于它的作用。在这种情况下,时间甚至可能爆炸。一切都有可能发生,我们猜不到。
  • 除非它是您的服务器(或您的工作代表他人这样做),否则请不要继续通过自动请求产生负载,某些服务器可能会将您列入黑名单。
  • 我设计了一个protococl来执行authntiaction,我使用java设计了protococl。在我的桌面上进行单一身份验证的计算时间约为 2.78 毫秒。无论如何我可以知道如果多个用户(10 个用户)尝试同时进行身份验证会发生什么(我可以将 2.78 乘以 10)吗? @Zabuza
  • 我只能重复我说的话,没有细节和代码我们是不可能说出来的。您的假设仅适用于时间恒定且不随负载呈线性或二次关系的情况。

标签: java performance computation


【解决方案1】:

典型的Core i7 CPU 有 4 到 8 个内核,可以并行执行 6..12 个线程(# 个内核乘以超线程)。

假设

  • 您拥有 i7-8650U(1.9GHz,4 核,超线程),
  • 您的 Java 服务器是多线程的(如果您使用任何流行的实现,如 Tomcat、Jetty 等,则应该是这种情况)并且
  • 没有其他 CPU 密集型工作负载正在运行

您可以说您的服务器可以同时处理 8 个身份验证请求:4 个全速 + 4 个由于超线程而以约 30% 的速度运行,或者每 8 个用户需要 2.87 毫秒*1.3=3.73 毫秒。

因此,10 个用户大约需要 3.73 毫秒+2.87 毫秒 = 6.6 毫秒。

然而,在衡量 Java 性能时,重要的是衡量负载下的稳态,以便将垃圾收集开销考虑在内。在测量单个请求时,您可能经常会完全错过垃圾收集步骤。

【讨论】:

    【解决方案2】:

    你不能说时间会乘以用户数。

    首先因为这意味着您的身份验证机制在 1 个线程上工作,这很糟糕。

    那么在您的计算机上注册的时间肯定会在生产或登台环境中有所不同。您将不得不添加网络跃点,但在其他只能执行此操作的终端服务器上,您无法将此时间与您个人计算机上的时间进行比较。

    如果您想测试这类东西,请使用性能/负载测试工具。我可以推荐JMeter 和 Apache 基金会的开源工具,或者Gatling 另一个开源工具。

    它们被设计用于此类用例。有了它们,您就可以调用您的身份验证 API,例如在 10 秒内有 100 个用户,您会看到最后会给出答案的报告。

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 2021-09-27
      • 2011-02-16
      • 2018-10-20
      相关资源
      最近更新 更多