巨大的“无法解释的”延迟几乎总是预热请求吞噬资源。检查您的 appengine 日志以查看在预热时使用了多少 api_ms 和 cpu_ms。
您可以通过增加 appengine 控制面板中的最大挂起延迟来避免预热。允许更高的延迟意味着请求将在触发新实例之前等待更长的时间。这可能会使每个请求变慢一些,但您将避免重量级加载请求。
为了帮助处理预热请求,请确保您的 appengine-web.xml 具有:
<warmup-requests-enabled>true</warmup-requests-enabled>
这将导致 appengine 调度程序在当前实例超载时抢先启动新实例{即它在请求转到新实例之前开始加载}。
然后,在受影响的慢 servlet 中,确保将 load-on-startup 放在 web.xml 中:
<servlet>
<servlet-name>my-servlet</servlet-name>
<servlet-class>com.company.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
load-on-startup 仅确保您的高优先级 servlet 在预热请求完成后始终准备就绪。