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. --- vespajlib/abi-spec.json | 1 + vespajlib/src/main/java/com/yahoo/protect/Process.java | 13 +++++++++++++ 2 files changed, 14 insertions(+) (limited to 'vespajlib') diff --git a/vespajlib/abi-spec.json b/vespajlib/abi-spec.json index 199291ac276..e5d5b8ba5b6 100644 --- a/vespajlib/abi-spec.json +++ b/vespajlib/abi-spec.json @@ -658,6 +658,7 @@ "public static void logAndDie(java.lang.String, boolean)", "public static void logAndDie(java.lang.String, java.lang.Throwable)", "public static void logAndDie(java.lang.String, java.lang.Throwable, boolean)", + "public static void dumpHeap(java.lang.String, boolean)", "public static void dumpThreads()" ], "fields": [] diff --git a/vespajlib/src/main/java/com/yahoo/protect/Process.java b/vespajlib/src/main/java/com/yahoo/protect/Process.java index 4d2fafd4665..bc5f0d8f876 100644 --- a/vespajlib/src/main/java/com/yahoo/protect/Process.java +++ b/vespajlib/src/main/java/com/yahoo/protect/Process.java @@ -1,7 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.protect; +import com.sun.management.HotSpotDiagnosticMXBean; +import javax.management.MBeanServer; +import java.io.IOException; +import java.lang.management.ManagementFactory; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; @@ -70,6 +74,15 @@ public final class Process { } } + public static void dumpHeap(String filePath, boolean live) throws IOException { + getHotspotMXBean().dumpHeap(filePath, live); + } + + private static HotSpotDiagnosticMXBean getHotspotMXBean() throws IOException { + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + return ManagementFactory.newPlatformMXBeanProxy( + server, "com.sun.management:type=HotSpotDiagnostic", HotSpotDiagnosticMXBean.class); + } public static void dumpThreads() { boolean alreadyDumpingThreads = busyDumpingThreads.getAndSet(true); -- cgit v1.2.3