1、查看所有日志,包括调度中心、任务执行、单任务执行日志。一般如果日志里有异常信息比较好解决,如果日志没有异常信息则继续执行如下操作。
2、查看job_log表里第一个不执行的任务,如图是名为"syncPolardbNode"的任务,找到这个任务的相关业务类,看看是不是没有加事务(本人就是这个原因,下面会讲),如果加上事务还是有问题则继续往下看。


3、触发了不执行也不抛异常通常表现为 CPU 占用率高、死循环或长时间不释放资源,所以看看线程到底在干嘛。
第一步、执行命令查看主进程PID
bash
ps -ef | grep java
第二步、执行命令查看是哪个线程在消耗 CPU
bash
top -H -p <PID>

通过上图可以看出,这些线程CPU使用率并不高,说明是死循环或长时间不释放资源。
第三步、将 线程PID 转换为十六进制
bash
printf "%x\n" 40932
#输出:9fe4
第四步、查看线程正在做什么,使用 jstack 查看线程堆栈,这是排查 Java 线程死循环或死锁最有力的工具,找到JDK安装包执行如下命令
bash
# 9fe4是刚才转换得到的十六进制线程ID
# /usr/java/jdk1.8.0_281-amd64/bin/jstack是jstack的位置
# <PID> 是进程 ID。
# -A 100 显示匹配行及其后 100 行,以便看到完整的堆栈轨迹。
/usr/java/jdk1.8.0_281-amd64/bin/jstack 28745 | grep -A 100 "9fe4"

根据 jstack 输出的堆栈信息,该线程(JobThread-107...)处于 WAITING (parking) 状态,核心原因是正在等待从 Druid 数据库连接池中获取数据库连接 。**可能是某些事务长时间未提交或回滚,一直占用连接,**检后发现syncPolardbNode所在的业务层确实没加事务导致连接一直不释放,最终将连接耗尽,再加上没有设置连接最大等待时间。

本人是这个问题,不代表都是这种问题,具体还需根据jstack输出的堆栈信息去排查。