april.a digital gardenAPRILNOTE!
↖ 全部笔记
April

Dify平台运行代码节点时报错Code execution service is unavailable

# Dify

背景

并发执行工作流时,代码节点报错:Code execution service is unavailable。

问题原因

代码节点运行在沙盒(sandbox)服务中,而 sandbox 服务默认配置:

  • max_workers: 4
  • max_requests: 50

sandbox 默认配置

参数含义

  • max_workers:控制“同时真正开始执行 run 逻辑的并发上限”。实现为一个带容量的信号量 channel。当并发超过 max_workers 时,请求不会立刻失败,而是在 sem <- struct{}{} 处阻塞排队,等有空位再继续。
  • max_requests:控制“同时在处理链路中的请求总数上限”(更准确说:in-flight 数量)。实现为一个 current 计数器。当 current >= max_requests 时,直接返回 503 + "Too many requests"。

相关代码片段:

1
2
3
4
5
6
7
m.lock.RLock()
if m.current >= max {
m.lock.RUnlock()
c.JSON(http.StatusServiceUnavailable, types.ErrorResponse(-503, "Too many requests"))
c.Abort()
return
}

解决办法

在 Dify 的 docker-compose.yaml 中对 sandbox 部分配置进行修改,新增 MAX_WORKERS 和 MAX_REQUESTS 的环境变量。

示例:

1
2
MAX_WORKERS: ${SANDBOX_MAX_WORKERS:-400}
MAX_REQUESTS: ${SANDBOX_MAX_REQUESTS:-5000}

docker-compose 添加环境变量

查找笔记