【问题标题】:GCP Cloud Run 503 Error: Service Unavailable for long running requestGCP Cloud Run 503 错误:长时间运行请求的服务不可用
【发布时间】:2021-04-25 04:41:47
【问题描述】:

我在 NodeJS 中构建了 4 个 API 端点,并使用应用程序的 docker 映像部署在 GCP Cloud 中,如下所示:

我的应用程序,访问单独的 API,返回响应并将数据保存在 Cloud SQL 中。

FROM node:12

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "node", "app.js" ]

1 API 大约需要 1 分钟 来返回响应,当我从 Postman 尝试并点击云运行 URL 时,我得到了成功的响应

其他 3 个 API 分别需要 2 分钟和其他 20 分钟才能返回响应,直到那时我从 Cloud run 收到错误

503 Service Unavailable 
takes: 2 m 1.02 s 
478 B

下面是给出的配置:

Memory allocated: 8 GB
CPU allocated: 4 
Maximum request per container: 20
Request timeout: 3600 seconds

NOTE: I am only hitting one request at a time 

可能是什么问题? 我增加了并发性,但这没有用。 对于我在 Cloud Function 服务中的应用程序将无法工作,因为超时为 9 分钟。

我可以在 GCP 中使用哪种服务来完成此类工作?

【问题讨论】:

  • 503 听起来像是崩溃了。你确定你没有达到最大内存吗?您在 Cloud Logging 中有其他日志跟踪吗?您是否有其他应用程序超时(例如,当您建立数据库连接时,超时可能会触发未捕获的异常,从而导致崩溃)?

标签: node.js google-cloud-platform google-cloud-run


【解决方案1】:

我发现问题在于 NodeJS 请求超时,默认为 120 秒,在下面的链接的帮助下,我解决了我的问题。

https://github.com/GoogleCloudPlatform/esp-v2/issues/438

所以我必须在我的代码中执行以下操作:

我可以为整个服务器设置超时:

var server = app.listen();
server.setTimeout(500000); // In milliseconds

或仅针对特定路线:

app.post('/xxx', function (req, res) {
   req.setTimeout(500000);
});

这解决了问题。

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2021-05-10
    • 2020-11-16
    • 1970-01-01
    • 2023-03-14
    • 2013-10-31
    • 1970-01-01
    • 2012-07-06
    • 2011-08-04
    相关资源
    最近更新 更多