1. 概述
用户在手动触发任务或者调度触发任务过程中,FineDataLink 工程中可能会出现由于内存不足、并发不足等问题导致的任务卡住、任务排队的问题,问题原因各不相同。本文将给出部分定时任务运行排队问题排查思路。
2. 排查思路
2.1 确认任务是否排队
进入「运维中心>定时任务>运行记录」下,选择指定的运行记录,点击「查看详情」即可看到任务记录,如下图所示:
若任务日志显示正在执行,没有节点信息,则表示任务正在排队中,如下图所示:
然后可以查看是否是当前用户运行的任务导致的排队,如果上一次实例运行中,会堵塞下一次实例调用。
一定要看全量记录, 不能只看最近一次运行记录,一定要看近一周或者全部时间, 不能只看当天记录,因为实际在运行中的任务可能是昨天的甚至前天的.,如下图所示:
注:若是由于高频率的调用定时任务导致的排队,可以使用实时任务,或者向技术支持获取帮助(技术支持联系方式:前往「服务」,选择「在线支持」、电话「400-811-8890」)。
2.2 查看日志
查看日志判断是否是资源不足导致的。
在「管理系统>智能运维>平台日志」下将「系统日志」导出,如下图所示:
注:推荐设置日志级别为 info,info 级别的日志在任务启动时会检验对应的资源。如下图所示:
在日志中搜索对应任务名或者搜索 resource is not enough,如下图所示:
资源检验会先检验内存,然后是线程并发,如果内存检验失败,说明是内存不足;如果内存检验成功并发检验失败,说明是并发不足。此时就需要去调整内存和并发资源。
3. 定时任务运行所需资源
这里就需要介绍内存和并发等的概念,以便用户在检查出问题后进行调整。
3.1 内存控制
估算资源判断任务是否可以运行:数据开发总内存数(负载分配划分给定时任务的内存+共享空间剩余的内存),如下图所示:
3.2 并发控制
估算资源判断任务是否可以运行:数据开发总并发数(负载均衡划分给定时任务的并发数,默认:集群节点数*cpu核心数*10),如下图所示:
其中
数据同步节点需要占用 2 个并发,数据转换节点每个输入算子和输出算子都占用 1 并发;
如果开启了并行取数,按照实际切分键并发数来算。
例如下面的数据转换预估占用 4 个并发。
3.3 特例
上述讲的内存和并发控制策略只对数据同步、数据转换和参数赋值这种同步节点和计算节点生效。对于 SQL脚本、Shell 脚本等节点,只受自身线程池限制。
注:实际执行的数据开发/数据转换/参数赋值的并发数,同时受数据开发/数据转换/参数赋值「线程池」和「并发控制」限制,取二者最小值。
类型 | 线程池大小 |
---|---|
SQL 脚本 | 默认为数据开发总并发数*4,倍数可调; 实际限制最小值为50 |
Shell脚本、Bat脚本、Python脚本共用一个线程池 | 默认为数据开发总并发数*1,倍数可调; 实际限制为1/2*CPU核数~5*CPU核数 |
若上述第二章步骤仍然排查不出原因,则可以联系帆软技术支持获取更多帮助(技术支持联系方式:前往「服务」,选择「在线支持」、电话「400-811-8890」)。