From 4002407c3ae5e4ccb7a04974f616db63267115bf Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 22 Sep 2021 07:17:10 +0200 Subject: Dump heap of live objects on failed application shutdown. --- .../com/yahoo/container/jdisc/ConfiguredApplication.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'container-disc') diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java index 9fe3728dc2c..be97c06749a 100644 --- a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java +++ b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java @@ -40,8 +40,10 @@ import com.yahoo.log.LogSetup; import com.yahoo.messagebus.network.rpc.SlobrokConfigSubscriber; import com.yahoo.net.HostName; import com.yahoo.vespa.config.ConfigKey; +import com.yahoo.vespa.defaults.Defaults; import com.yahoo.yolean.Exceptions; +import java.io.IOException; import java.util.Collections; import java.util.HashSet; import java.util.IdentityHashMap; @@ -400,9 +402,17 @@ public final class ConfiguredApplication implements Application { shutdownDeadlineExecutor = new ScheduledThreadPoolExecutor(1, new DaemonThreadFactory("Shutdown deadline timer")); shutdownDeadlineExecutor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false); long delayMillis = 50 * 1000; - shutdownDeadlineExecutor.schedule(() -> com.yahoo.protect.Process.logAndDie( - "Timed out waiting for application shutdown. Please check that all your request handlers " + - "drain their request content channels.", true), delayMillis, TimeUnit.MILLISECONDS); + shutdownDeadlineExecutor.schedule(() -> { + String heapDumpName = Defaults.getDefaults().underVespaHome("tmp/java_shutdown.") + ProcessHandle.current().pid() + ".hprof"; + try { + com.yahoo.protect.Process.dumpHeap(heapDumpName, true); + } catch (IOException e) { + log.log(Level.WARNING, "Failed writing heap dump:", e); + } + com.yahoo.protect.Process.logAndDie( + "Timed out waiting for application shutdown. Please check that all your request handlers " + + "drain their request content channels.", true); + }, delayMillis, TimeUnit.MILLISECONDS); } private static void addHandlerBindings(ContainerBuilder builder, -- cgit v1.2.3