From 522c0c52e488fd86ce8fc92c5387eea62eac9cfb Mon Sep 17 00:00:00 2001 From: chaijunjie0101 <1340011734@qq.com> Date: Sun, 19 Jan 2025 22:48:42 +0800 Subject: [PATCH] HBASE-29045 Support new async-profiler > 2.9 version --- .../apache/hadoop/hbase/http/ProfileServlet.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java index 86f58c25bff2..26c459247bf9 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java @@ -19,6 +19,9 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -67,7 +70,8 @@ public class ProfileServlet extends HttpServlet { private static final String CONTENT_TYPE_TEXT = "text/plain; charset=utf-8"; private static final String ASYNC_PROFILER_HOME_ENV = "ASYNC_PROFILER_HOME"; private static final String ASYNC_PROFILER_HOME_SYSTEM_PROPERTY = "async.profiler.home"; - private static final String PROFILER_SCRIPT = "/profiler.sh"; + private static final String OLD_PROFILER_SCRIPT = "profiler.sh"; + private static final String PROFILER_SCRIPT = "asprof"; private static final int DEFAULT_DURATION_SECONDS = 10; private static final AtomicInteger ID_GEN = new AtomicInteger(0); static final String OUTPUT_DIR = System.getProperty("java.io.tmpdir") + "/prof-output-hbase"; @@ -195,7 +199,14 @@ protected void doGet(final HttpServletRequest req, final HttpServletResponse res new File(OUTPUT_DIR, "async-prof-pid-" + pid + "-" + event.name().toLowerCase() + "-" + ID_GEN.incrementAndGet() + "." + output.name().toLowerCase()); List cmd = new ArrayList<>(); - cmd.add(asyncProfilerHome + PROFILER_SCRIPT); + Path profilerScriptPath = Paths.get(asyncProfilerHome, "bin", PROFILER_SCRIPT); + if (!Files.exists(profilerScriptPath)) { + LOG.info( + "async-profiler script {} does not exist, fallback to use old script {}(version <= 2.9).", + PROFILER_SCRIPT, OLD_PROFILER_SCRIPT); + profilerScriptPath = Paths.get(asyncProfilerHome, OLD_PROFILER_SCRIPT); + } + cmd.add(profilerScriptPath.toString()); cmd.add("-e"); cmd.add(event.getInternalName()); cmd.add("-d");