From 33967c675b0e50b7438fefc6e142c0c6520ab451 Mon Sep 17 00:00:00 2001 From: LamGC Date: Sun, 15 Aug 2021 13:56:44 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=B0=83=E6=95=B4=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E5=8F=82=E6=95=B0=E5=92=8C=E4=BD=9C=E7=94=A8=E5=9F=9F?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整线程池为静态, 以为所有 Trigger 实例提供, 消除线程池重复创建导致的线程过剩情况, 将线程数设为核心数量. --- .../sentry/script/groovy/trigger/OnceTrigger.java | 9 +++++++-- .../sentry/script/groovy/trigger/TimerTrigger.java | 10 +++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java index 0a2b1f7..1971265 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java @@ -1,6 +1,8 @@ package net.lamgc.oracle.sentry.script.groovy.trigger; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -12,13 +14,16 @@ import java.util.concurrent.Executors; @TriggerName("once") public class OnceTrigger implements GroovyTrigger { - private final static ExecutorService executor = Executors.newFixedThreadPool(4, + private final static Logger log = LoggerFactory.getLogger(OnceTrigger.class); + private final static ExecutorService EXECUTOR = Executors.newFixedThreadPool( + Runtime.getRuntime().availableProcessors(), new ThreadFactoryBuilder() .setNameFormat("GroovyOnceExec-%d") + .setUncaughtExceptionHandler((t, e) -> log.error("脚本执行时发生未捕获异常.", e)) .build()); @Override public void run(Runnable task) { - executor.execute(task); + EXECUTOR.execute(task); } } diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java index edffa07..41f5502 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java @@ -3,20 +3,24 @@ package net.lamgc.oracle.sentry.script.groovy.trigger; import com.google.common.base.Throwables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; /** * @author LamGC */ +@SuppressWarnings("unused") @TriggerName("timer") public class TimerTrigger implements GroovyTrigger { private final static Logger log = LoggerFactory.getLogger(TimerTrigger.class); private CronTrigger trigger; - private final TaskScheduler scheduler = new ThreadPoolTaskScheduler(); + private final static ThreadPoolTaskScheduler SCHEDULER = new ThreadPoolTaskScheduler(); + static { + SCHEDULER.setPoolSize(Runtime.getRuntime().availableProcessors()); + SCHEDULER.setErrorHandler(t -> log.error("脚本执行时发生异常.", t)); + } /** * 设定定时时间. @@ -49,7 +53,7 @@ public class TimerTrigger implements GroovyTrigger { return; } - scheduler.schedule(runnable, trigger); + SCHEDULER.schedule(runnable, trigger); } }