【发布时间】:2020-03-07 18:00:06
【问题描述】:
我正在对托管在 Google Cloud Run 上的 ExpressJS 应用进行负载测试,当流量激增时,有一段时间我在 Stackdriver 中看到许多 500 错误,并显示消息“请求失败,因为实例无法启动成功地。” - 这实际上会导致服务器停机。
看到随着应用程序的扩展,此错误会更频繁地发生,我认为这是由于 Cloud Run 负载均衡器在这些实例准备好接受请求之前过早地将流量分配给新实例造成的。
随着我继续运行负载测试,实例不断重复地被杀死和重启,所以在负载开启时没有恢复机制。
我没有从我的 NodeJS 应用程序中看到任何错误日志,这表明实际上没有一个失败的请求到达我的应用程序。
我可以做些什么来避免这些错误?
Cloud Run 如何确定端口已准备好接受请求?
是我在我的 ExpressJS 应用程序中配置错误,还是我可以在向新实例发送请求之前以某种方式延迟 Cloud Run?
【问题讨论】:
-
当您说您在应用程序日志中看不到错误时...您能对此进行扩展吗?您是否在任何 Stackdriver 日志记录中看到任何错误?
-
抱歉含糊不清。我在 Stackdriver 中看到许多状态为 500 的错误日志,其中显示“请求失败,因为实例无法成功启动”。但我没有看到从我的 NodeJS 应用程序记录的任何错误。
-
事实证明这完全是由其他原因引起的...我的应用程序连接到一个 Cloud SQL 实例,该实例的最大连接限制为 100。但是,自动缩放会推送该数量在负载测试期间,实例数量远远超过 100,这会导致实例初始化失败,因为无法连接到 Cloud SQL。我现在看到这已作为 Cloud SQL 的一部分记录在 cloud.google.com/sql/docs/postgres/…。
-
您可以使用
--max-instances参数来限制生成实例的数量并节省您的资源 -
我投票决定将此问题作为题外话结束,因为问题原来是其他问题。
标签: google-cloud-run