perf: 调整线程池参数和作用域.

调整线程池为静态, 以为所有 Trigger 实例提供, 消除线程池重复创建导致的线程过剩情况, 将线程数设为核心数量.
This commit is contained in:
LamGC 2021-08-15 13:56:44 +08:00
parent da86b0f9bc
commit 33967c675b
Signed by: LamGC
GPG Key ID: 6C5AE2A913941E1D
2 changed files with 14 additions and 5 deletions

View File

@ -1,6 +1,8 @@
package net.lamgc.oracle.sentry.script.groovy.trigger; package net.lamgc.oracle.sentry.script.groovy.trigger;
import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@ -12,13 +14,16 @@ import java.util.concurrent.Executors;
@TriggerName("once") @TriggerName("once")
public class OnceTrigger implements GroovyTrigger { 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() new ThreadFactoryBuilder()
.setNameFormat("GroovyOnceExec-%d") .setNameFormat("GroovyOnceExec-%d")
.setUncaughtExceptionHandler((t, e) -> log.error("脚本执行时发生未捕获异常.", e))
.build()); .build());
@Override @Override
public void run(Runnable task) { public void run(Runnable task) {
executor.execute(task); EXECUTOR.execute(task);
} }
} }

View File

@ -3,20 +3,24 @@ package net.lamgc.oracle.sentry.script.groovy.trigger;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger; import org.springframework.scheduling.support.CronTrigger;
/** /**
* @author LamGC * @author LamGC
*/ */
@SuppressWarnings("unused")
@TriggerName("timer") @TriggerName("timer")
public class TimerTrigger implements GroovyTrigger { public class TimerTrigger implements GroovyTrigger {
private final static Logger log = LoggerFactory.getLogger(TimerTrigger.class); private final static Logger log = LoggerFactory.getLogger(TimerTrigger.class);
private CronTrigger trigger; 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; return;
} }
scheduler.schedule(runnable, trigger); SCHEDULER.schedule(runnable, trigger);
} }
} }