java - 95% 如何确定客户端上的默认超时设置?

标签 java timeout percentile

我有一个客户端库,它使用 RestTemplate 调用我的服务,并以字符串形式返回响应,然后将此响应字符串返回给正在使用我们客户端的客户。

现在,我们客户的总体 SLA(第 95 个百分点)约为 15 毫秒,这意味着 95% 的时间,客户的调用应在约 15 毫秒内返回。我们的客户端内部的默认超时设置为 ~500 毫秒。

在我们的客户端上进行一些负载和性能测试后,性能看起来相当不错,并且 95% 的时间,调用会在大约 10 毫秒内返回。

问题陈述:-

现在我的问题是 -

  • 正如我上面提到的,我们客户端内部的默认超时值约为 500 毫秒,然后在我们的负载和性能测试后,第 95 个百分位数约为 10 毫秒。我在某处读到,您始终应该设置比当前 SLA 更高的超时值,以便您应该允许所有调用通过,然后测量第 95 个百分位。这是真的?或者我应该在客户端内部设置 60-70 毫秒的超时设置?但我想,在这种情况下,大多数调用都会超时?
  • 如果我在客户端上将内部默认超时值设置为 ~50 毫秒,那么根据我的理解,95% 的百分比将不会在 ~15 毫秒内出现,因为我们不允许所有调用通过。对吗?

我只是想了解一些事情,这意味着如果超时值设置得相当高(与我们的 SLA 相比)与超时值设置得非常接近我们的 SLA,那么它决定 95% 的是什么?意思是如果 SLA 约为 15 毫秒,并且我在内部将超时值设置为 ~100 毫秒,而如果 SLA 为 ~15 毫秒,然后我将超时值设置为 ~500 毫秒。

最佳答案

你需要更精确。它并不意味着“95%的时间”。它意味着“已完成调用的 95%”所有调用的 95%,包括完全失败”。可能是后者,但你需要检查一下。

那么你需要做两件事。

  1. 对于合规性测试,请设置超时 = SLA,以便您可以衡量是否合规。
  2. 然后在生产中设置一个合理的超时。 15 毫秒和 500 毫秒对于生产超时来说都太短了。我会把它设置为至少几秒,也许高达 30 秒。一个经验法则是将其设置为预期服务时间的两倍,但在本例中这太短了。

关于java - 95% 如何确定客户端上的默认超时设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24022588/

相关文章:

javascript - 如何在javascript中将超时设置为无穷大

c# - 如何使用 Session.Query 设置 Nhibernate LINQ 命令超时

python - 使用另一列的滚动值的数据框百分位

performance - Perl:计算百分位数的最有效方法

python - 将 DataFrame 中每列的值设置为第 90 个百分点

java - 无法执行目标 org.apache.maven.plugins :maven-clean-plugin:2. 4.1:clean

java - eclipse 上的Tomcat错误

java - 需要 MatOfMatch 对象做什么?

java - 乔达 : parse string as DateTime with weird timezone format

sql-server - 与 Azure SQL 数据库连接时,Azure 数据工厂中“超出锁定请求超时期限”