aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2019-07-30 11:23:00 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2019-07-30 11:23:00 +0200
commit0f544a9e52731b15c45b29065a8aab47a46072b0 (patch)
tree0f0d62c1e0b09a8558e52e0cb8cd301217ddbb17 /node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java
parentdd0fffa63ae9f5da15e2ea18ba879a356d15ea99 (diff)
Report jstack for java cores
Diffstat (limited to 'node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java29
1 files changed, 25 insertions, 4 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java
index 2cddee6aa2a..6e5f65a5d48 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java
@@ -77,10 +77,23 @@ public class CoreCollector {
List<String> readBacktrace(NodeAgentContext context, Path coredumpPath, Path binPath, boolean allThreads) {
String threads = allThreads ? "thread apply all bt" : "bt";
String[] command = {gdb.toString(), "-n", "-ex", threads, "-batch", binPath.toString(), coredumpPath.toString()};
+
ProcessResult result = docker.executeCommandInContainerAsRoot(context, command);
- if (result.getExitStatus() != 0) {
+ if (result.getExitStatus() != 0)
throw new RuntimeException("Failed to read backtrace " + result + ", Command: " + Arrays.toString(command));
- }
+
+ return Arrays.asList(result.getOutput().split("\n"));
+ }
+
+ List<String> readJstack(NodeAgentContext context, Path coredumpPath, Path binPath) {
+ String[] command = isRunningVespa6(context) ?
+ new String[] {"jstack", binPath.toString(), coredumpPath.toString()} :
+ new String[] {"jhsdb", "jstack", "--exe", binPath.toString(), "--core", coredumpPath.toString()};
+
+ ProcessResult result = docker.executeCommandInContainerAsRoot(context, command);
+ if (result.getExitStatus() != 0)
+ throw new RuntimeException("Failed to read jstack " + result + ", Command: " + Arrays.toString(command));
+
return Arrays.asList(result.getOutput().split("\n"));
}
@@ -96,11 +109,19 @@ public class CoreCollector {
Path binPath = readBinPath(context, coredumpPath);
data.put("bin_path", binPath.toString());
- data.put("backtrace", readBacktrace(context, coredumpPath, binPath, false));
- data.put("backtrace_all_threads", readBacktrace(context, coredumpPath, binPath, true));
+ if (binPath.getFileName().toString().equals("java")) {
+ data.put("backtrace_all_threads", readJstack(context, coredumpPath, binPath));
+ } else {
+ data.put("backtrace", readBacktrace(context, coredumpPath, binPath, false));
+ data.put("backtrace_all_threads", readBacktrace(context, coredumpPath, binPath, true));
+ }
} catch (RuntimeException e) {
context.log(logger, Level.WARNING, "Failed to extract backtrace", e);
}
return data;
}
+
+ private static boolean isRunningVespa6(NodeAgentContext context) {
+ return context.node().wantedVespaVersion().map(v -> v.getMajor() == 6).orElse(false);
+ }
}