首页 > 其他 > 详细

记一次job不跑的问题

时间:2019-11-27 12:04:09      阅读:64      评论:0      收藏:0      [点我收藏+]

就在昨晚app后台升级后,发现有个重要的job不跑了,导致业务无法正常的走下去。这时候心里慌得一批,但还好我们有多台服务器影响不大,屁话少说进入主题。

看了下job的实现,发现其使用了java.util.concurrent.Executor#execute来执行job

 1 final CountDownLatch latch = new CountDownLatch(size);
 2 for (final Orders orders : successfulSigning) {
 3     threadPool.execute(new Runnable() {
 4         @Override
 5         public void run() {
 6             try {
 7                 LOGGER.info("{} xxx job start", orders.getId());
 8                 // 这里是业务逻辑
 9                 LOGGER.info("{} xxx job end", orders.getId());
10             } catch (Exception e) {
11                 LOGGER.error("发生了异常", e);
12             } finally {
13                 latch.countDown();
14             }
15         }
16     });
17 }
18 latch.await();

查阅了日志,发现第7行的日志都未打印,这时候我便马上将问题定位到了threadPool上;为什么threadPool执行不了了,难道是池中的数量满了???

接下来我便去看了线程池定义的个数

1 private static ExecutorService threadPool = Executors.newFixedThreadPool(5);

好像也没啥问题,那为job为啥未执行到上述的7行呢,经过仔细的观察发现,此线程池还有其它的job在使用,而刚好有一个job卡住了,导致线程池没有释放掉,从而引起了其它job无法拿到资源执行自身逻辑!!!

最后我将那个卡主的job解决掉了,业务便能正常运行了。

记一次job不跑的问题

原文:https://www.cnblogs.com/bzfsdr/p/11940241.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!