gpt4 book ai didi

java - 为什么在 Google App Engine 上运行的进程会挂起?

转载 作者:搜寻专家 更新时间:2023-10-31 20:33:02 24 4
gpt4 key购买 nike

我们有一个 cron 作业,每小时在后端模块上运行一次并创建任务。 cron 作业在 Cloud SQL 数据库上运行查询,任务向其他服务器发出 HTTP 调用并更新数据库。通常它们运行良好,即使创建了数千个任务,但有时它会“卡住”并且日志中没有任何内容可以阐明这种情况。例如,昨天我们监控了 cron 作业,它创建了几十个任务然后停止了,还有 8 个任务也卡在了队列中。当很明显什么都没有发生时,我们又运行了几次该过程,每次都成功完成。

一天后,原始任务因 DeadlineExceededException 被终止,然后显然在同一实例中运行的其他 8 个任务被终止,并显示以下消息:处理此请求的进程遇到问题,导致它退出。这很可能会导致对您的应用程序的下一个请求使用新进程。如果您经常看到此消息,则可能是在应用程序初始化期间抛出了异常。 (错误代码 104)

在进程被终止之前,我们在日志中完全看不到它们的记录,而现在我们看到它们在 DeadlineExceededException 时间之前没有日志记录,所以我们不知道它们是在什么时候卡住的。我们怀疑数据库中存在某种锁定,但我们在以下链接中看到查询有 10 分钟的限制,因此这将导致进程在一天内失败:https://cloud.google.com/appengine/docs/java/cloud-sql/#Java_Size_and_access_limits

我们模块的类和缩放配置是:

<instance-class>B4</instance-class>
<basic-scaling>
<max-instances>11</max-instances>
<idle-timeout>10m</idle-timeout>
</basic-scaling>

队列的配置是:

<rate>5/s</rate>
<max-concurrent-requests>100</max-concurrent-requests>
<mode>push</mode>
<retry-parameters>
<task-retry-limit>5</task-retry-limit>
<min-backoff-seconds>10</min-backoff-seconds>
<max-backoff-seconds>200</max-backoff-seconds>
</retry-parameters>

我为 cron 作业上传了一些跟踪数据的图像: http://imgur.com/a/H5wGG .这包括跟踪摘要和时间线的开始/结束。没有 8 个终止任务的跟踪数据。

这可能是什么原因造成的,我们如何进一步调查?

最佳答案

我们最终通过以下步骤设法解决了问题:

  1. 我们将模块分成两部分 - 一个模块运行 cron 作业,一个模块来处理生成的任务。这让我们看到问题在于处理任务,因为这是唯一的一直卡住的模块。
  2. 我们将并发任务的数量限制为 2,这似乎是在系统不会卡住的情况下可以同时处理的最大任务数量。

关于java - 为什么在 Google App Engine 上运行的进程会挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com