错误分析报告
错误来源
这个错误 不是 Dify Python API 代码产生的 ,而是来自 dify-plugin-daemon(一个独立的 Go 服务,负责插件运行时的管理)。
完整错误链路:
- 插件在工作流中调用
session.storage.set()保存数据 - Plugin daemon 收到请求,在
persistence.go中检查存储大小限制 - 发现已分配/累计大小超过限制,返回错误:
allocated size is greater than max storage size - 上层包装为:
save data failed: allocated size is greater than max storage size
两层存储限制
| 限制层级 | 默认值 | 配置位置 |
|---|---|---|
| 单插件限制 | 1 MB (1048576 bytes) |
插件 manifest.yaml 中 resource.permission.storage.size |
| 全局限制 | 100 MB (104857600) |
Plugin daemon 环境变量 PERSISTENCE_STORAGE_MAX_SIZE |
Plugin daemon 同时检查两个限制,取 更严格 的那个生效。数据库表 tenant_storage 会按 tenant_id + plugin_id 跟踪累计存储用量。
修改方案
你有两个维度的修改方式(可以同时做):
方案一:增加插件 manifest 中的 storage.size(推荐)
找到有问题的插件的 manifest.yaml,增大 storage.size 字段。例如从默认 1MB 改为 10MB:
yaml
resource:
permission:
storage:
enabled: true
size: 10485760 # 改为 10MB
size 的取值范围:1024 (1KB) ~ 1073741824 (1GB)。
方案二:增加全局 PERSISTENCE_STORAGE_MAX_SIZE
在 docker/envs/core-services/plugin-daemon.env 中增加(或修改):
ini
PERSISTENCE_STORAGE_MAX_SIZE=524288000 # 500MB
或者通过 .env 文件设置。
方案三:在 Dify 管理后台清理插件已占用的存储
如果插件已积累了大量历史数据,可以在数据库中清理相应租户的 tenant_storage 记录:
sql
-- 查看某个租户下各插件的存储用量
SELECT tenant_id, plugin_id, size FROM tenant_storage ORDER BY size DESC;
-- 清理特定插件的存储记录(让插件重新开始计数)
DELETE FROM tenant_storage WHERE tenant_id = 'your_tenant_id' AND plugin_id = 'your_plugin_id';
推荐的排查步骤
-
确定是哪个插件报错 --- 查看
plugin_daemon容器的日志:bashdocker logs dify-plugin-daemon-1 --tail 100 -
查看该插件 manifest 中的 storage 配置,确认当前 size 值
-
查看数据库 tenant_storage 表,确认该插件当前的累计存储用量
-
根据实际需要存储的数据量,选择方案一或方案二进行调整