V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cowcomic
V2EX  ›  Java

String @Scheduled 比预计时间早很多调起任务,大家有遇到过么

  •  
  •   cowcomic · 2023-01-15 10:25:02 +08:00 · 2959 次点击
    这是一个创建于 680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我设置了一个 schedule

    @Scheduled(cron = "0 0 23 * * ?")
    

    理论上应该晚上 11 点调起,哪怕有差异也应该控制在 1 秒左右

    但我这个任务没天晚上 8 ,9 ,10 点就调起了,而且不是固定时间,每天都不一样

    log 如下:

    2023-01-14 21:04:12,582 INFO c.e.t.b.d.c.DAGController [scheduling-1]
    and different trigged time every day
    

    服务是跑在 k8s 上的

    检查了 pod 的 date 是正常的,服务器的的 date 是正常的

    Spring version : 5.1.6.RELEASE

    求助

    第 1 条附言  ·  2023-01-15 17:20:07 +08:00
    感谢大家的回复,补充一下之前漏掉的信息
    1 ,Schedule 用的是多线程,而且目前设置定时的只有三个,早上 8 点一个,晚上 22 点一个,晚上 23 点一个,这三个任务从日志看执行都很快完成了,而且是从服务启动开始就没一个准的,都提前了,应该不是任务积压的问题
    2 ,服务器和容器都是正确的时间,是 CST 时间,而且提前的时间也没有规律,不是每次都提前一个整点,而且每次时间都不一样,目前看还没超过两小时,但没啥规律忽短忽长的,也都不是整数
    第 2 条附言  ·  2023-01-15 17:22:46 +08:00
    3 ,重启过容器和服务,问题依旧,包括把 pod 删了重新冲 habor 拉个新的镜像都没用
    第 3 条附言  ·  2023-01-18 21:57:56 +08:00
    最新进展,懵的一笔,问题恢复了,但原因仍然未知
    我们的整个系统是用 k8s 管理的
    之前把这个定时器所在的服务从 master 迁移到其他 node 节点上了,之后就发生了这个问题
    一直以来都没往那方面想
    这两天实在没招了,尝试迁移回 master 节点试试,结果迁移回去好了
    暂时还没时间做更细致的实验,等放假回去多做做实验再看看

    这是为什么啊~~~
    大家有啥思路也可以提提
    14 条回复    2023-01-15 21:57:48 +08:00
    iamv2er
        1
    iamv2er  
       2023-01-15 11:17:56 +08:00 via iPhone
    重启一下
    TUNGH
        2
    TUNGH  
       2023-01-15 12:01:25 +08:00
    是不是定时任务太多,处理不过来导致延迟了?
    feelinglucky
        3
    feelinglucky  
       2023-01-15 12:55:48 +08:00
    检查下时区
    win301
        4
    win301  
       2023-01-15 15:09:41 +08:00
    @Scheduled 注解,默认就使用一个线程,就是说如果你有多个 @Scheduled 任务,那么都只能使用一个线程来运行程序,如果某个线程很占用时间,那么就会出现你说的现象了,解决办法就是初始化 ThreadPoolTaskExecutor ,然后通过 @Scheduled 注解的定时任务就可以使用到多线程了
    hccsoul
        5
    hccsoul  
       2023-01-15 16:27:35 +08:00
    GMT+8
    ChovyChu
        6
    ChovyChu  
       2023-01-15 16:33:10 +08:00
    @win301 大概率是这个问题,之前也遇到过
    cowcomic
        7
    cowcomic  
    OP
       2023-01-15 17:21:19 +08:00
    @TUNGH
    @feelinglucky
    @ChovyChu
    Schedule 用的是多线程,而且目前设置定时的只有三个,早上 8 点一个,晚上 22 点一个,晚上 23 点一个,这三个任务从日志看执行都很快完成了,而且是从服务启动开始就没一个准的,都提前了,应该不是任务积压的问题
    cowcomic
        8
    cowcomic  
    OP
       2023-01-15 17:22:14 +08:00
    @iamv2er 重启过,问题依旧,包括把 pod 删了重新冲 habor 拉个新的镜像都没用
    cowcomic
        9
    cowcomic  
    OP
       2023-01-15 17:23:02 +08:00
    @feelinglucky
    @hccsoul
    服务器和容器都是正确的时间,是 CST 时间,而且提前的时间也没有规律,不是每次都提前一个整点,而且每次时间都不一样,目前看还没超过两小时,但没啥规律忽短忽长的,也都不是整数
    Terminator0826
        10
    Terminator0826  
       2023-01-15 17:48:45 +08:00 via Android
    可以多写几个 cron 试试,然后只设一个 schedule ,再不行换个依赖版本看看是不是 spring 的 bug
    zhenjiachen
        11
    zhenjiachen  
       2023-01-15 20:44:54 +08:00 via iPhone
    给 jvm 添加一个 timezone 的参数试试
    zsdroid
        12
    zsdroid  
       2023-01-15 21:21:03 +08:00
    我也遇到过设置了 10 点,结果 9 点 58 分就执行了
    cp19890714
        13
    cp19890714  
       2023-01-15 21:32:49 +08:00
    如果还没有找到原因,那就用笨方法:控制变量,一个个尝试。
    列出所有可能导致该问题的原因, 每次改变一个,观察执行结果。
    cowcomic
        14
    cowcomic  
    OP
       2023-01-15 21:57:48 +08:00
    @Terminator0826 spring issue 上的回复是 5.1.x 不维护了,回头换个高版本的试试
    @zhenjiachen 好,回头试一下
    @cp19890714 嗯嗯,之前就是没头绪,看了回复有了一些可以试的了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3467 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.