跳转到内容
搜索文档

故障排查

最后更新 查看 MarkdownAgent 设置

调试

wrangler devwrangler tail 均可帮助您调试 Durable Objects。

wrangler tail 显示 Worker 代码为每个请求提供的控制台和异常日志的实时流,包括普通 Worker 请求和 Durable Object 请求。运行 npx wrangler deploy 后,您可以在 Worker 项目根目录使用 wrangler tail,并访问 Worker URL 以在终端中查看控制台和错误日志。

常见错误

No event handlers were registered. This script does nothing.(未注册任何事件处理程序。此脚本不会执行任何操作。)

在 Wrangler 文件中,确保 dirmain 条目指向包含 Worker 代码的正确文件,如果使用 ES 模块语法,文件扩展名应为 .mjs 而非 .js

Cannot apply --delete-class migration to class.(无法对类应用 --delete-class 迁移。)

使用 npx wrangler deploy --delete-class <ClassName> 删除迁移时,可能遇到此错误:"Cannot apply --delete-class migration to class <ClassName> without also removing the binding that references it"。在再次尝试应用 --delete-class 之前,应先从 Wrangler 配置文件[durable_objects] 下移除相应的绑定。

Durable Object is overloaded.(Durable Object 过载。)

单个 Durable Object 实例无法完成超过单个线程可能完成的工作量。这些错误表示 Durable Object 工作过多,无法跟上传入请求:

  • Error: Durable Object is overloaded. Too many requests queued. 排队请求总数过高。
  • Error: Durable Object is overloaded. Too much data queued. 排队请求中的数据总量过高。
  • Error: Durable Object is overloaded. Requests queued for too long. 最早的请求在队列中等待时间过长。
  • Error: Durable Object is overloaded. Too many requests for the same object within a 10 second window. 在短时间(10 秒)内对 Durable Object 的请求数过高。此错误表示更极端的过载程度。

要解决此错误,您可以减少每个请求的工作量,或发送更少的请求。例如,您可以将请求分散到更多 Durable Object 实例中。

这些错误及其他因过载导致的错误,其异常上会设置 .overloaded 属性,可用于避免重试过载操作。

Your account is generating too much load on Durable Objects. Please back off and try again later.(你的账户对 Durable Objects 产生了过多负载。请稍后重试。)

创建新或现有 Durable Objects 的 stub 的速度有限制。这些查找通常会被缓存,意味着对同一组最近访问的 Durable Objects 的尝试应会成功,因此捕获此错误并在短暂等待后重试是安全的。如果可能,也请考虑将这些查找分散到多个请求中。

Durable Object reset because its code was updated.(Durable Object 因代码更新而重置。)

错误消息中的 reset 指内存状态。已通过 state.storage 成功持久化的任何持久状态不受影响。

请参阅全局唯一性

Durable Object storage operation exceeded timeout which caused object to be reset.(Durable Object 存储操作超时,导致对象被重置。)

为防止无限阻塞,存储操作可花费的时间有限制。在包含足够多键值对的 Durable Objects 中,deleteAll() 可能达到该时间限制并失败。发生这种情况时,请注意每次 deleteAll() 调用都会取得进展,重试直到成功是安全的。否则请联系 Cloudflare 支持

Your account is doing too many concurrent storage operations. Please back off and try again later.(你的账户并发存储操作过多。请稍后重试。)

除了建议的退避方法外,也请考虑将代码改为尽可能使用 state.storage.get(keys Array<string>) 而非多个单独的 state.storage.get(key) 调用。

这篇文档对您有帮助吗?