故障排查 / 函數執行超時
函數執行超時可能有多種可能,需要根據不同情況進行辨別。
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. 參考文檔