如何解决Google App Engine延迟?

时间:2020-04-06 13:30:31

标签: java google-app-engine google-cloud-platform paas google-cloud-endpoints-v2

我们的项目在Google App Engine标准环境中运行,并按如下所述配置了自动缩放功能。应用中启用了热身请求,我们正在使用Google Endpoints服务。但是,在不同的情况下,我面临着延迟问题。 环境: Java 8 ,实例类型: F4_1G 自动缩放的配置: 最小背景:2 最大并发请求数:80 最小等待等待时间:6s max-pending-latency:10秒

我在JMeter上进行了测试,并配置为发送 85个异步请求,且其启动时间为10秒。 从应用程序日志中,我可以注意到appengine需要很长时间来处理请求。以下是我的问题

1。大多数请求由于超时而失败。在图1中,我们可以发现请求花费了88.2秒。我知道AppEngine自动缩放具有60秒的请求超时限制。但是我们配置了至少2个实例的自动缩放,并且max-instance没有限制。 AppEngine实例应处理请求,否则AppEngine应扩大规模以处理请求。 为什么没有发生? Image_1

  1. 扩大规模时,请求将花费43.6秒。在图2中,我们可以看到请求是在20:27:01:663 IST发出的,而API执行的第一行是从20:27:40:407 IST开始的。 这两次之间发生了什么?我可以获取这段时间的日志吗? Image_2
  2. 扩大规模之后,后续请求也将花费很长时间。例如,一个API请求通常在2秒内完成。在图3中,我们可以注意到API花费了42.4s的时间而没有加载请求过程,然后请求在IST 20:27:01:728发出。 API执行的第一行从IST 20:27:40:708开始。 这两次之间发生了什么? Image_3

1 个答案:

答案 0 :(得分:1)

我认为这与Java 8运行时有关,因为Java是繁重的运行时,因此Java 8运行时需要花费很长时间来部署新实例。

部署时间超过60秒,您的无人参与请求将因超时而终止。

我认为您可以改善升级策略,例如尝试使用更多实例启动服务并添加此选项“ target_throughput_utilization”,以便在遇到80个并发请求之前开始引发新实例

文档指出: “当并发请求数达到等于最大并发请求次数乘以目标吞吐量利用率的值时,调度程序将启动一个新实例。”

min-instances: 4 
max-concurrent-requests: 80
target_throughput_utilization:0.75
min-pending-latency: 6s 
max-pending-latency: 10s

在我的示例中,新实例将在实际实例具有(80 X 0.75)60个并发请求时启动