跳转至

故障排查 / 函数执行超时

函数执行超时可能有多种可能,需要根据不同情况进行辨别。

1. 在 DataFlux Func UI 编辑器中执行耗时过长的函数

为保护系统,对于在 DataFlux Func 编辑器中执行函数,系统会忽略 timeout 配置,耗时限制固定为 60 秒

当函数执行时间超过耗时限制后,系统会直接 Kill 进程,并抛出类似如下错误:

Text Only
1
2
3
4
Traceback (most recent call last **IN USER SCRIPT**):
  File "demo__test_timeout", line 5, in test_timeout
    time.sleep(100)
worker.tasks.TaskTimeout: Task execution has taken too much time and has been killed by force
可能原因 解决方案
所执行的函数运行超过 60 秒限制 在编辑器中执行函数主要用于开发 / 调试,应当使用较小的数据集、请求量
请勿直接执行完整长耗时任务

2. 函数执行耗时过长导致工作进程被 Kill

为了保护系统,DataFlux Func 对函数执行的最长时间有限制,不允许无限制运行下去。 在超过一定时间后,会直接 Kill 执行进程。

具体表现为:

  1. 在任务执行的日志中观察到产生包含 TaskTimeout 的错误,如:
Text Only
1
2
3
4
Traceback (most recent call last **IN USER SCRIPT**):
  File "demo__test_timeout", line 5, in test_timeout
    time.sleep(100)
worker.tasks.TaskTimeout: Task execution has taken too much time and has been killed by force
  1. 调用函数 API 返回状态码 599,返回包含 EFuncTimeout(一般也会包含 TaskTimeout 信息)的如下数据:
JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "ok"     : false,
  "error"  : 599.2,
  "status" : 599,
  "reason" : "EFuncTimeout",
  "message": "Func task timeout",
  "detail": {
    "name"               : "Func.Runner",
    "id"                 : "task-xxxxx",
    "triggerTime"        : 1755596408.972,
    "startTime"          : 1755596408.974,
    "endTime"            : 1755596411.979,
    "status"             : "timeout",
    "exceptionType"      : "TaskTimeout",
    "exception"          : "TaskTimeout('Task execution has taken too much time and has been killed by force')",
    "exceptionFrom"      : "worker",
    "originExceptionType": "TaskTimeout",
    "originException"    : "TaskTimeout('Task execution has taken too much time and has been killed by force')"
  },
  "reqDump": {
    "method": "GET",
    "url"   : "http://localdev:8089/api/v1/func-api/demo__test_timeout.test_timeout.xxxxx/s"
  },
  "traceId"   : "TRACE-XXXXX",
  "clientTime": null,
  "reqTime"   : "2025-08-19T09:40:08.967Z",
  "respTime"  : "2025-08-19T09:40:12.140Z",
  "reqCost"   : 3173
}

其中,reqCost字段为此函数从开始执行到被 Kill 经过的时间(毫秒)

可能原因及解决方案:

可能原因 解决方案
所执行的函数未指定 timeout 超时参数,但函数运行超过默认超时限制 联系函数开发者排查错误,包括且不限于:
超时参数设置过短
函数内调用外部系统响应过慢
所执行的函数指定了 timeout 超时参数(秒),且函数运行超时 同上

函数超时默认为 30 秒,最大设置为 3600 秒

X. 参考文档