跳转至

内存相关错误#

n8n 不限制每个节点可以获取和处理的数据量。虽然这给了您自由,但当工作流执行需要的内存超过可用内存时,它可能会导致错误。本页面说明如何识别和避免这些错误。

仅适用于自托管 n8n

本页面描述的是自托管 n8n 时的内存相关错误。访问云数据管理了解 n8n Cloud 的内存限制。

识别内存不足情况#

n8n 提供错误消息来在某些内存不足情况下警告您。例如,诸如执行在此节点停止(n8n 可能在执行时内存不足)的消息。

包括运行工作流问题连接丢失503 服务暂时不可用的错误消息表明 n8n 实例已变得不可用。

在自托管 n8n 时,您可能还会在服务器日志中看到分配失败 - JavaScript 堆内存不足等错误消息。

在 n8n Cloud 上,或使用 n8n 的 Docker 镜像时,n8n 在遇到此类问题时会自动重启。但是,使用 npm 运行 n8n 时,您可能需要手动重启它。

典型原因#

当工作流执行需要的内存超过 n8n 实例可用内存时,就会发生此类问题。增加工作流执行内存使用量的因素包括:

  • JSON 数据的数量。
  • 二进制数据的大小。
  • 工作流中的节点数量。
  • 一些节点很消耗内存:代码节点和较旧的 Function 节点会显著增加内存消耗。
  • 手动或自动工作流执行:手动执行会增加内存消耗,因为 n8n 会为前端复制数据。
  • 同时运行的其他工作流。

避免内存不足情况#

遇到内存不足情况时,有两种选择:增加 n8n 可用的内存量或减少内存消耗。

增加可用内存#

在自托管 n8n 时,增加 n8n 可用的内存量意味着为您的 n8n 实例提供更多内存。这可能会在您的托管提供商处产生额外费用。

在 n8n Cloud 上,您需要升级到更大的计划。

减少内存消耗#

这种方法更复杂,意味着需要重新构建导致问题的工作流。本节提供一些关于如何减少内存消耗的指导原则。并非所有建议都适用于所有工作流。

  • 将处理的数据拆分为更小的块。例如,不要在每次执行时获取10,000行数据,而是在每次执行时处理200行数据。
  • 尽可能避免使用代码节点。
  • 在处理大量数据时避免手动执行。
  • 将工作流拆分为子工作流,并确保每个子工作流只向其父工作流返回有限的数据量。

将工作流拆分起初可能看起来有悖常理,因为这通常需要至少添加两个节点:用于将项目拆分为较小批次的循环处理项目节点和用于启动子工作流的执行工作流节点。

但是,只要您的子工作流对每个批次进行繁重的处理,然后只向主工作流返回一个小的结果集,这就会减少内存消耗。这是因为子工作流只在内存中保存当前批次的数据,之后内存就会再次释放。

增加旧内存#

这适用于自托管 n8n。遇到 JavaScript 堆内存不足错误时,为 V8 JavaScript 引擎的旧内存部分分配额外内存通常很有用。要做到这一点,请通过 CLI 或通过 NODE_OPTIONS环境变量设置适当的 V8 选项 --max-old-space-size=SIZE

此页面是否
💬 微信

🚀 与作者交流

关注公众号
n8n实战笔记公众号
n8n实战笔记
📚 教程 💡 案例 🔧 技巧
添加微信
添加作者微信
1对1 专业指导
⚡ 快答 🎯 定制 🚀 支持