故障排查 / 函数执行超时
函数执行超时可能有多种可能,需要根据不同情况进行辨别。
1. 在 DataFlux Func UI 编辑器中执行耗时过长的函数
为保护系统,对于在 DataFlux Func 编辑器中执行函数,系统会忽略timeout
或api_timeout
配置,耗时限制固定为 45 秒。
当函数执行时间超过耗时限制后,系统会直接 Kill 进程,并抛出类似如下错误:
Text Only | |
---|---|
1 2 3 4 5 6 7 8 |
|
原因 | 解决方案 |
---|---|
所执行的函数运行超过 45 秒限制 | 在编辑器中执行函数主要用于开发 / 调试,应当使用较小的数据集、请求量 请勿直接执行完整长耗时任务 |
2. 函数执行耗时过长导致工作进程被 Kill
为了保护系统,DataFlux Func 对函数执行的最长时间有限制,不允许无限制运行下去。 在超过一定时间后,会直接 Kill 执行进程。
具体表现为:
- 在自动触发配置 / 批处理执行的日志中观察到产生包含
SoftTimeLimitExceeded
的错误,如:
Text Only | |
---|---|
1 2 3 4 |
|
- 调用授权链接返回状态码
599
,返回包含EFuncTimeout
(一般也会包含SoftTimeLimitExceeded
信息)的如下数据:
JSON | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
其中,reqCost
字段为此函数从开始执行到被 Kill 经过的时间(毫秒)
可能原因及解决方案:
原因 | 解决方案 |
---|---|
所执行的函数未指定timeout 超时参数,但函数运行超过默认超时限制 |
联系函数开发者排查错误,包括且不限于: 超时参数设置过短 函数内调用外部系统响应过慢 |
所执行的函数指定了timeout 超时参数(秒),且函数运行超时 |
同上 |
函数超时默认为 30 秒,最大设置为 3600 秒
3. 函数执行耗时过长导致授权链接提前返回
为了保护系统,DataFlux Func 对通过授权链接调用函数的最长响应时间有限制,不允许服务器无限制保持 HTTP 连接。 在超过一定时间后,API 层面会放弃等待函数返回,直接响应 HTTP 请求。
具体表现为:
- 调用授权链接返回状态码
599
,返回包含EAPITimeout
的如下数据:
JSON | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
API 接口超时仅表示 HTTP 响应时间超时,此时函数可能依然在后台运行,并遵循函数超时处理逻辑
可能原因及解决方案:
原因 | 解决方案 |
---|---|
所执行的函数未指定api_timeout API 超时参数,但函数运行超过默认超时限制 |
联系函数开发者排查错误,包括且不限于: API 超时参数设置过短 函数内调用外部系统响应过慢 |
所执行的函数指定了api_timeout API 超时参数(秒),且函数运行超时 |
同上 |
API 超时默认为 10 秒,最大设置为 180 秒。同时,API 超时不会长于函数超时