Dify 运行代码报错Code execution service is unavailable
背景问题原因参数含义解决办法 背景 并发执行工作流时,代码节点报错:Code execution service is unavailable。 问题原因 代码节点运行在沙盒(sand 2026-7-5 06:38:20 Author: www.uedbox.com(查看原文) 阅读量:9 收藏

背景

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

问题原因

代码节点运行在沙盒(sandbox)服务中,而 sandbox 服务默认配置有可能是空的,或者是如下这种:

max_workers: 4

max_requests: 50

但不管是怎样的,当你在代码节点报: Code execution service is unavailable 。时,你可以进入api或任意容器执行:

curl -X POST http://sandbox:8194/v1/sandbox/run \

  -H "Content-Type: application/json" \

  -H "X-API-Key: dify-sandbox" \

  -d '{"language":"python3","code":"print(1+1)"}'

当出现:

{"code":-503,"message":"Too many requests","data":null}

时,基本就可确定是配置max_workers的原因了,如下:

参数含义

  • 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_WORKERS  和  MAX_REQUESTS  的环境变量。

示例:

MAX_WORKERS: ${SANDBOX_MAX_WORKERS:-400}

MAX_REQUESTS: ${SANDBOX_MAX_REQUESTS:-5000}

然后,停止主窗口,并重新部署后就会是:

root@36436831ac9c:/# curl -X POST http://sandbox:8194/v1/sandbox/run \

  -H "Content-Type: application/json" \

  -H "X-API-Key: dify-sandbox" \

  -d '{"language":"python3","code":"print(1+1)"}'

{"code":0,"message":"success","data":{"error":"","stdout":"2\n"}}

问题解决。

其它参考,对我来说没用,但你们可参考:

https://github.com/langgenius/dify/issues/3675


文章来源: https://www.uedbox.com/post/120088/
如有侵权请联系:admin#unsafe.sh