故障排查 / 函式執行超時
函式執行超時可能有多種可能,需要根據不同情況進行辨別。
1. 在 DataFlux Func UI 編輯器中執行耗時過長的函式
為保護系統,對於在 DataFlux Func 編輯器中執行函式,系統會忽略 timeout 配置,耗時限制固定為 60 秒。
當函式執行時間超過耗時限制後,系統會直接 Kill 程序,並丟擲類似如下錯誤:
| Text Only |
|---|
| 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 執行程序。
具體表現為:
- 在任務執行的日誌中觀察到產生包含
TaskTimeout 的錯誤,如:
| Text Only |
|---|
| 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
|
- 呼叫函式 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. 參考文件