【问题标题】:GAE Getting lots of CancellationException for Task Queue DataStore callGAE 为任务队列数据存储调用获取大量 CancellationException
【发布时间】:2019-07-30 21:48:53
【问题描述】:

我有一个运行 TaskQueue 作业的 Java GAE 实例。在过去的 48 小时内,我收到了很多 CancellationException 错误(24 小时内大约有 36 个)。

该错误总是发生在对特定表的 DataStore 查询中。查询在索引列 projectId 上,查询是复合 OR(即 projectId = -1 或 projectId = 23)。整张表有96条记录,任何一次查询最多拉回20条记录。

有人知道我为什么会遇到这些问题

谢谢 保罗

更新:对不起,我的错误,这不是任务队列调用的一部分,它是设置任务队列调用的代码。通话时间平均约为 59.5 秒(感谢 Alex 指出这一点)。查看跟踪(感谢亚历克斯)似乎延迟在数据存储调用中。它可以快到 21 毫秒或超过 59000 毫秒,这太长了。我刚刚再次检查了日志,过去 24 小时内没有任何异常,所以这可能是 48 小时故障。

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore


    【解决方案1】:

    Understanding "CancellationException: Task was cancelled" error while doing a Google Datastore query

    基于这个问题,听起来CancellationException 意味着您正在达到TaskQueue Jobs 必须完成执行的10 分钟超时。

    您的日志是否显示这些请求在引发异常之前运行了多长时间(例如,stackdriver 显示此延迟任务运行了 902 毫秒)?

    查询一个包含 96 条记录的表应该没问题,但是如果不能看到您的任务代码是什么样子就很难确定。

    您可以将您的任务拆分为更小的“子任务”,并让子任务在返回之前启动下一个子任务。

    编辑:您也可以尝试去这里https://console.cloud.google.com/traces/traces 查看您的请求花费时间的细分

    【讨论】:

    • 嗨,它没有显示它运行了多长时间,因为把这个查询放在代码的开头附近。我不能把它分开,因为它运行这个查询来决定需要发生什么。就好像故障出在数据存储区并且它正在冻结,但我看不到任何沿着这些线的东西
    • 我添加了 2 张截图。 console.cloud.google.com/logs/viewer 显示请求的总运行时间是什么?另外,您在跟踪报告中看到了什么
    • 嗨,Alex,感谢您提供的额外信息,这真的很有帮助(我以前从未注意到那里的时间,也不知道跟踪屏幕)。请参阅上面的更新。
    • 所以听起来它只是挂起然后达到 60 秒超时。本文讨论了它并提供了一些提示(特别是有关预热请求的部分):cloud.google.com/appengine/articles/deadlineexceedederrors 很难说它为什么会挂起,可能是各种各样的事情。过去我在 GAE 中遇到过其他问题,其中一些低级库中的内存泄漏会导致在实例上运行的所有请求挂起,直到它们达到超时。
    • 嗨,亚历克斯,是的,这听起来有点像一个(或 48 个)关闭的问题。也许,如果它可能是内存泄漏,我会尝试重新部署以查看是否修复。我希望有一些简单的方法来重置系统以克服这些问题。感谢您的洞察力和帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多