From fda71e764be730508a421f884456414b451f78ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E6=89=BF=E7=A5=A5?= <1142819049@qq.com> Date: Fri, 18 Jan 2019 10:25:35 +0800 Subject: [PATCH] must shutdown thread pool when no in use (#3255) * must shutdown thread pool when no in use --- .../support/AbortPolicyWithReport.java | 63 ++++++++----------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java index 0f4f72a7d69..8a137613f17 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java @@ -24,13 +24,13 @@ import java.io.File; import java.io.FileOutputStream; -import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.Semaphore; import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.ExecutorService; /** * Abort Policy. @@ -78,43 +78,34 @@ private void dumpJStack() { return; } - Executors.newSingleThreadExecutor().execute(new Runnable() { - @Override - public void run() { - String dumpPath = url.getParameter(Constants.DUMP_DIRECTORY, System.getProperty("user.home")); - - SimpleDateFormat sdf; - - String os = System.getProperty("os.name").toLowerCase(); - - // window system don't support ":" in file name - if(os.contains("win")){ - sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); - }else { - sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss"); - } - - String dateStr = sdf.format(new Date()); - FileOutputStream jstackStream = null; - try { - jstackStream = new FileOutputStream(new File(dumpPath, "Dubbo_JStack.log" + "." + dateStr)); - JVMUtil.jstack(jstackStream); - } catch (Throwable t) { - logger.error("dump jstack error", t); - } finally { - guard.release(); - if (jstackStream != null) { - try { - jstackStream.flush(); - jstackStream.close(); - } catch (IOException e) { - } - } - } - - lastPrintTime = System.currentTimeMillis(); + ExecutorService pool = Executors.newSingleThreadExecutor(); + pool.execute(() -> { + String dumpPath = url.getParameter(Constants.DUMP_DIRECTORY, System.getProperty("user.home")); + + SimpleDateFormat sdf; + + String os = System.getProperty("os.name").toLowerCase(); + + // window system don't support ":" in file name + if (os.contains("win")) { + sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); + } else { + sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss"); + } + + String dateStr = sdf.format(new Date()); + //try-with-resources + try (FileOutputStream jStackStream = new FileOutputStream(new File(dumpPath, "Dubbo_JStack.log" + "." + dateStr))) { + JVMUtil.jstack(jStackStream); + } catch (Throwable t) { + logger.error("dump jStack error", t); + } finally { + guard.release(); } + lastPrintTime = System.currentTimeMillis(); }); + //must shutdown thread pool ,if not will lead to OOM + pool.shutdown(); }