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

Sandbox 并发限制导致 Code execution service is unavailable

背景

并发执行工作流时,代码节点报错: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"

相关代码片段:

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_WORKERSMAX_REQUESTS 的环境变量。

示例:

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

docker-compose 添加环境变量

posted @ 2025-12-30 15:33  日报初级开发工程师  阅读(8)  评论(0)    收藏  举报