zoukankan      html  css  js  c++  java
  • 记一次job不跑的问题

    就在昨晚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解决掉了,业务便能正常运行了。

  • 相关阅读:
    struts1.X的jar包
    struts2.1.6所需jar包详解
    hibernate的运行原理
    hibernate的save()方法详解
    flash的动态加载技术
    havok之内存管理
    worker中加载本地文件报错的解决方案
    行为树之我见
    havok之thread和memory system
    havok之collision detection
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/11940241.html
Copyright © 2011-2022 走看看