调度任务为什么一直处于计划中

1 问题描述
在调度中心的运行日志列表,出现长时间处于计划中状态的调度任务。

2 问题排查
出现这种情况,一般是执行该任务的MQ消息队列阻塞,具体排查步骤如下:
1、进入任务详情页,确定所属应用id、任务类型和状态说明

所属应用:分应用部署下,任务会根据所属应用路由到对应容器节点运行
任务类型:不同任务类型使用对应的执行线程池不一样,由于每个应用节点执行线程数固定,如果执行线程都在执行任务中,剩余的待执行任务会阻塞处于计划中,因此,大部分任务处于计划中的原因是执行线程池被有问题的任务占用阻塞。

状态说明
应用未部署,任务无法执行 (分应用部署下,该应用未部署,所以任务无法找到执行机执行)
排队等待执行 (由于执行线程池有限,当执行线程池已有任务在运行,后续任务就会排队)
2、前往调度中心的执行服务器监控
查看不同任务类型的线程池使用情况,例如任务类型为“业务任务”的线程池,最大线程数为8,运行中线程数为4。6.0.1及以上版本:限制单个账套下的任务最多只能占最大线程数的一半。

3、前往monitor,找到运行节点和线程池
根据执行服务器监控的展示的结果,根据ip或执行实例名到monitor-注册中心找到对应的节点,查找任务类型对应的线程池,找到执行时间长的堆栈。如果确认是某个任务耗时长,需要联系对应的业务部门处理。



4、确认运行节点是否健康
如果执行节点上调度的执行线程池都是空闲的,在执行节点的线程堆栈中搜索SchExecutorMessageCustomer,在日志中搜索不健康,确认当前节点是否健康。如果不健康,按“调度服务检测到不健康处理方式”处理。


5、前往mq管理后台,确认MQ消息是否阻塞
打开Queues窗口,根据schedule关键字过滤队列名称,Ready列倒序排序,找到名称以bos开头BIZJOB结尾的队列。例如有24条任务正在处理中,225条任务等待执行,则代表MQ消息阻塞。

MQ消息阻塞的原因有以下两种可能
1、该队列没有消费者(点开队列名称展开详情查看Comsummer信息,如为空则说明没有消费
调度任务为什么一直处于计划中
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



