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

  • 相关阅读:
    解题报告 百进制数
    解题报告 Loongint 的夜晚
    解题报告 树形图计数
    解题报告 一元三次方程求解
    解题报告 Loongint 的旅行安排
    解题报告 数字查找
    用C++编写简单绘图语言的词法分析器——程序清单
    C++ 连接 mysql 的一个例子(Visual Studio 2005)
    fedora 8 下JDK 6.0 配置
    IBM DB2 V9 常用命令
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/11940241.html
Copyright © 2011-2022 走看看