美文网首页DAILY BUG
所有定时调度任务中断问题

所有定时调度任务中断问题

作者: 刘泽田 | 来源:发表于2019-04-30 17:36 被阅读0次

一. 现象:

    最近系统定时任务会不定时中断,不是一个任务中断,是全部任务都中断掉,为了数据及时性采取临时解决办法,重启大法!

    最近闲下来深入排查了下问题根源,其实网上有许多种解决办法,此篇主要是记录下问题排查思路;

二. 原因分析

1.为什会线程出现中断

    原因无外乎几种情况:

    死锁(程序编写bug,一旦出现,只能够重启);

    数据流操作阻塞挂死;

    其实出现这个现象就直接想到是后者(之前遇到过..),心里大概有数是与http请求读取数据时阻塞住了,但是一个定时任务有许多网络请求,哪里出问题了?怎么定位?

2.为什么全部线程都挂死了

一个线程卡死,为什么会导致所有线程卡死?spring 的 @Scheduled定时任务不是并发去执行的吗?

三. 解决

    首先第一个问题,既然线程卡死,直接使用jvm提供的命令查看线程状态,定位顶级方法名称,找出卡死的具体代码:

    1. 使用命令找出程序pid,方法很多,可自行百度;

        ps -ef | grep 'project_name'

    2. 使用jvm的jstack命令查询堆栈状态

            jstack -l pid | grep '定时任务方法名' ;

        这样即可找出具体出现问题堆栈信息,找到具体阻塞方法:笔者这边的核心问题是http在请求的时候没有设置readTimeOut导致流阻塞;后续会继续整理出jvm各个命令的使用;

        httpUrlConn.setReadTimeout(30000);

        第二个问题,一个线程阻塞住,所有线程为什么会卡死;这个与配置有关; 原配置如下,只配置executor任务执行器,这样线程执行是串行执行,即执行完一个再去执行第二个;

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >

    <property name="corePoolSize" value="10"/>

    <property name="maxPoolSize" value="20"/>

    <property name="queueCapacity" value="25"/>

<task:annotation-driven executor="taskExecutor"/>

修改后:

<task:executor id="executor" pool-size="10" queue-capacity="10" />

<task:scheduler id="scheduler" pool-size="10"/>

<task:annotation-driven executor="executor" scheduler="scheduler" />

增加调度器,可以配置调度线程池的大小,调度线程在被调度任务完成前不会空闲,具体配置参数可参考官方文档;

如有错误,欢迎指正,大家五一快乐!!

相关文章

  • 所有定时调度任务中断问题

    一. 现象: 最近系统定时任务会不定时中断,不是一个任务中断,是全部任务都中断掉,为了数据及时性采取临时解决办法,...

  • Java定时任务调度工具详解

    本篇内容:什么是定时任务调度?Java定时任务调度工具详解之 Timer篇Java定时任务调度工具详解之 Quar...

  • 学习Linux2

    linux 学习2 定时任务管理 crond 任务调度 crontab 进行 定时任务的设置 概述任务调度:是指系...

  • 定时任务调度之Timer

    定时任务调度之Timer 前言 定时任务调度,有两个比较重要的概念,一个是定时,一个是调度,所谓的定时调度,指的是...

  • 分布式任务调度-xxl-job

    前言 为什么要使用分布式任务调度框架? 使用原因和解决问题是为了解决: 实现定时调度任务 将定时任务分布式部署 提...

  • Spring定时调度器原理

    定时调度器主要是负责一些定时任务的调度,

  • 定时任务框架Quartz

    定时任务框架! 定时任务就是分为三个模块:任务、触发器、调度器 过程就是,调度器协调触发器来再固定时间去触发任务!

  • 关于任务定时调度

    Tags:定时作业调度 分布式定时任务调度 Quartz TBSchedule Elastic-job 基于给定...

  • crond任务调度(定时任务调度)

    基本语法crontab [选项]选项-e : 编辑crontab定时任务-l : 查询crontab定时任务...

  • Linux任务调度

    crond任务调度 crontab用于定时任务的设置。任务调度:是指系统在某个时间执行的特定的命令或程序。任务调度...

网友评论

    本文标题:所有定时调度任务中断问题

    本文链接:https://www.haomeiwen.com/subject/qlivnqtx.html