问题
xxljob在测试环境经常执行失败
报错日志
java.util.concurrent.ExecutionException: java.lang.reflect.InvocationTargetException at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:206) at com.xxl.job.core.thread.JobThread.run(JobThread.java:150) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31) at com.xxl.job.core.thread.JobThread$1.call(JobThread.java:143) at com.xxl.job.core.thread.JobThread$1.call(JobThread.java:136) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:750) Caused by: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@4cc4d42c rejected from java.util.concurrent.ScheduledThreadPoolExecutor@77982189[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 3] at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830) at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:326) at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:533) at com.dpp.web.service.process.DppCrawlingProcessService.scheduleRetry(DppCrawlingProcessService.java:308) at com.dpp.web.service.process.DppCrawlingProcessService.crawlingSpaceStation(DppCrawlingProcessService.java:170) at com.dpp.web.xxljob.DppCrawlingJobHandler.crawlingSpaceStationDataJob(DppCrawlingJobHandler.java:62) ... 9 more
原因
线程数较小
com.dpp.web.service.process.DppCrawlingProcessService.scheduleRetry(DppCrawlingProcessService.java:308)
从上面一段日志可以看出xxljob一直想加入并调用代码中的线程池,但是被拒绝,说明代码中的线程池数量不够,代码中是这么写的
private static final ScheduledExecutorService EXECUTOR = Executors.newScheduledThreadPool(1);
其中,开发环境中执行成功率较高,这可能是因为测试环境的服务器的cpu较小
线程池被关闭了
在代码中将线程池关闭导致xxl-job在访问时无线程可用

解决
增大线程池中的线程数
private static final ScheduledExecutorService EXECUTOR = Executors.newScheduledThreadPool(20);
不关闭线程池

结果
可以看到xxl-job此时的成功率较高

1059

被折叠的 条评论
为什么被折叠?



