十锁 2019-05-14 18:21 采纳率: 50%
浏览 7582
已采纳

ThreadPoolTaskExecutor 异步任务 对于长时间大数据的执行,执行一半线程终止。

生产环境上,对于较大的数据导出,使用了ThreadPoolTaskExecutor 的异步任务。
实际使用中发现,对于较大的数据导出如4G的sqlite的DB文件,异步任务执行到一半的时候不在执行,通过进度最终发现,进度到一定的时候就不在进行任务了,们目前试了2次,一次是1520/3344,一次是1778/3344 停止任务。
我不清楚是不是线程抛出异常了,因为我在现有的日志中没有发现相关异常记录,如果是 我应该怎么记录这个日志呢?
Spring配置

<!-- 核心线程数,默认为1 -->

<!-- 最大线程数,默认为Integer.MAX_VALUE -->

<!-- 队列最大长度,一般需要设置值>=notifyScheduledMainExecutor.maxNum;默认为Integer.MAX_VALUE-->

<!-- 线程池维护线程所允许的空闲时间,默认为60s -->

<!-- 线程池对拒绝任务(无线程可用)的处理策略,目前只支持AbortPolicy、CallerRunsPolicy;默认为后者 -->

<!-- AbortPolicy:直接抛出java.util.concurrent.RejectedExecutionException异常 -->



//自动注入
@Autowired
ThreadPoolTaskExecutor threadPoolTaskExecutor;
//异步任务
ExportDbTaskThread zipPackageThread = new ExportDbTaskThread(resultPackageService,expFile,contextPath,
tbType,filterParam,sortParam,xzqdm+xzqmc,progressId);
threadPoolTaskExecutor.execute(zipPackageThread);

    问题已解决; sqllite 存入blob字段时 以流的形式将多媒体文件读入流中,并在流中组装prmt,导致堆内存溢出,使线程无限等待。
  • 写回答

3条回答 默认 最新

  • 十锁 2019-05-16 17:48
    关注

    问题已解决; sqllite 存入blob字段时 以流的形式将多媒体文件读入流中,并在流中组装prmt,导致堆内存溢出,使线程无限等待。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器