全部产品
云市场

常见问题

更新时间:2019-08-28 16:47:19

您在使用 SchedulerX 过程中会碰到一些问题。本文将介绍如何处理一些典型的使用问题。

暂无可用机器

现象

当的应用接入任务调度并部署到 EDAS,通过连接机器验证是否成功时,弹出暂无可用机器的提示。

可能的原因

  • 应用接入任务调度失败
  • Jar 包冲突
  • SchedulerXWorker 配置错误

处理方法

  1. 登录部署应用的 ECS 实例,查看是否存在日志目录/home/${user.home}/logs/schedulerx/worker.log。如果是root用户起的进程,日志在/root/logs/schedulerx/worker.log

    说明:如果应用部署在 EDAS 中,${user.home}admin

  1. 查看worker.log日志是否有异常日志。

    • 如果有异常日志,确认是否是 Jar 包冲突。详情请参见JAR 包冲突
    • 如果没有异常日志,搜索”started”,检查 SchedulerXWorker 的配置是否正确。

JAR 包冲突

JAR 包冲突可能包含其中具体子包冲突的多种可能的原因。可以在日志里搜一下“maven dependencies”,可以看到每个jar的版本和路径,帮助快速定位和解决jar包冲突,如下图:maven dependencies

然后参照下表“schedulerx使用的jar包”,把自己低版本的排掉:

jar包 版本
guava 20.0
com.typesafe.config 1.3.0
protobuf-java 2.6.1
io.netty 3.10.6.Final
javaassist 3.21.0-GA
hessian 4.0.51
commons-configuration 1.10
commons-validator 1.4.0

Jar包冲突常见堆栈信息

1. com.typesafe.config 包冲突

现象

com.typesafe.config 包冲突

  1. Caused by: com.typesafe.config.ConfigException$Parse

处理办法

将 com.typesafe.config 升级到 1.3。

2. protobuf 冲突

现象

  1. 2019-03-20 14:49:41.742 [33471_69216-akka.actor.default-dispatcher-4] WARN com.alibaba.schedulerx.worker.SchedulerxWorker:315 - heartbeat error
  2. java.lang.VerifyError: class com.alibaba.schedulerx.protocol.Worker$WorkerHeartBeatRequest overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;
  3. at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_181]
  4. at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_181]
  5. at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_181]

处理办法

将 protobuf-java 升级到 2.6.1。

3. ActorSystem.create 超时导致启动不起来

现象

  1. 2019-03-20 11:52:48.030 [main] ERROR com.alibaba.schedulerx.worker.SchedulerxWorker:142 - Schedulerx Worker error
  2. java.util.concurrent.TimeoutException: Futures timed out after [10000 milliseconds]
  3. at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:223) ~[scala-library-2.11.11.jar:?]
  4. at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:227) ~[scala-library-2.11.11.jar:?]
  5. at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:190) ~[scala-library-2.11.11.jar:?]
  6. at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53) ~[scala-library-2.11.11.jar:?]
  7. at scala.concurrent.Await$.result(package.scala:190) ~[scala-library-2.11.11.jar:?]
  8. at akka.remote.Remoting.start(Remoting.scala:189) ~[akka-remote_2.11-2.4.20.jar:?]
  9. at akka.remote.RemoteActorRefProvider.init(RemoteActorRefProvider.scala:212) ~[akka-remote_2.11-2.4.20.jar:?]
  10. at akka.actor.ActorSystemImpl.liftedTree2$1(ActorSystem.scala:828) ~[akka-actor_2.11-2.4.20.jar:?]
  11. at akka.actor.ActorSystemImpl._start$lzycompute(ActorSystem.scala:825) ~[akka-actor_2.11-2.4.20.jar:?]
  12. at akka.actor.ActorSystemImpl._start(ActorSystem.scala:825) ~[akka-actor_2.11-2.4.20.jar:?]
  13. at akka.actor.ActorSystemImpl.start(ActorSystem.scala:841) ~[akka-actor_2.11-2.4.20.jar:?]
  14. at akka.actor.ActorSystem$.apply(ActorSystem.scala:245) ~[akka-actor_2.11-2.4.20.jar:?]
  15. at akka.actor.ActorSystem$.apply(ActorSystem.scala:288) ~[akka-actor_2.11-2.4.20.jar:?]
  16. at akka.actor.ActorSystem$.apply(ActorSystem.scala:263) ~[akka-actor_2.11-2.4.20.jar:?]
  17. at akka.actor.ActorSystem$.create(ActorSystem.scala:191) ~[akka-actor_2.11-2.4.20.jar:?]
  18. at akka.actor.ActorSystem.create(ActorSystem.scala) ~[akka-actor_2.11-2.4.20.jar:?]
  19. at com.alibaba.schedulerx.worker.SchedulerxWorker.init(SchedulerxWorker.java:119) [schedulerx-worker-0.2.0.jar:?]

处理办法

将 io.netty 升级到 3.10.6.Final 版本。

4. hessian 冲突

现象

  1. java.lang.NoSuchMethodError: com.caucho.hessian.io.SerializerFactory.createDefault()Lcom/caucho/hessian/io/SerializerFactory;

处理办法

将 hessian 升级到 4.0.51。

5. javassist 冲突

现象

javassist

处理办法

使用 3.18.2-GA 版本。

Sping Boot 找不到任务对应的 bean

检查pom.xml文件,如果包含spring-boot-devtools依赖,请删除。

tablestore protobuf-2.4.1 和 SchedulerX 不兼容

请参见使用 Java SDK 时遇到 Protobuf 或 HttpClient 库冲突

任务失败(submit jobInstanceId to worker timeout)

  1. 结果或错误信息: submit jobInstanceId=28384771 to worker=WorkerInfo [ip=192.168.32.166, port=41114, workerId=30574_7365, metrics=Metrics(cpuLoad1=0.01, cpuLoad5=0.05600000000000001, cpuProcessors=2, heap1Usage=0.20147679324894516, heap5Usage=0.20379746835443036, heap1Used=191, heapMax=948, diskUsage=0.24241670191853087, diskUsed=9742, diskMax=40187)] timeout, cost=5004ms

解决方案:

  1. 先去worker.log看下有没有异常日志,如果有异常日志可能是jar包冲突。
  2. 如果没有异常日志,可能是机器负载过高或者重启造成的。