Spring @Scheduled 没有在 fixedDelayString 间隔上运行

问题描述 投票:0回答:0

我们有一个在 Kubernetes 集群中运行的 Spring Boot 应用程序。
我们正在使用 Spring 的

@Scheduled
注释来安排不同的作业。
目前我们有 9 个调度器,其中 5 个每 30 分钟运行一次,两个每 10 分钟运行一次,2 个每 500 毫秒运行一次。
我们看到每 500 毫秒运行一次的奇怪行为,我们添加了日志记录和执行时间 - 但似乎这 500 毫秒运行不正常 - 有时执行之间有几秒钟的间隔

@Scheduled(fixedDelayString = "500")
public void executeJob() {
 // DO SOMETHING
  logger.info("Finished scheduler, that took {} milliseconds",(endTime - startTime));
}

我们已经将属性

spring.task.scheduling.pool.size
设置为20,这意味着可以运行20个线程来执行计划的作业(默认为1)。
同样在开始调试之前,我们将 CPU 资源从 1 个 CPU 核心增加到 2.5 个 CPU 核心,然后再增加到 4 个 CPU 核心,但我们看到了相同的行为。

这里是一些出现在我们的日志系统中的日志

May 02 18:15:19.749service-client-Finished scheduler, that took 0 milliseconds
May 02 18:15:02.071service-client-Finished scheduler, that took 1 milliseconds
May 02 18:14:57.040service-client-Finished scheduler, that took 1 milliseconds
May 02 18:14:56.039service-client-Finished scheduler, that took 1 milliseconds
May 02 18:14:55.039service-client-Finished scheduler, that took 1 milliseconds
May 02 18:14:54.039service-client-Finished scheduler, that took 1 milliseconds

注意: 实际的 Scheduled 类每个有 2 个 bean(这意味着每个 pod 有 4 个 bean),它们正在运行 500 毫秒的作业。它们是通过

@Bean
注释实例化的。

java spring-boot scheduled-tasks
© www.soinside.com 2019 - 2024. All rights reserved.