跳轉至

故障排查 / 函數執行超時

函數執行超時可能有多種可能,需要根據不同情況進行辨別。

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. 參考文檔