static void setResponseHeader(final HttpServletResponse response) {
    response.setHeader(ACCESS_CONTROL_ALLOW_METHODS, ALLOWED_METHODS);
    response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
    response.setContentType(CONTENT_TYPE_TEXT);
  }
Servlet that runs async-profiler as web-endpoint. Following options from async-profiler can be
specified as query paramater. // -e event profiling event: cpu|alloc|lock|cache-misses etc. // -d
duration run profiling for 'duration' seconds (integer) // -i interval sampling interval in
nanoseconds (long) // -j jstackdepth maximum Java stack depth (integer) // -b bufsize frame
buffer size (long) // -t profile different threads separately // -s simple class names instead of
FQN // -o fmt[,fmt...] output format: summary|traces|flat|collapsed|svg|tree|jfr|html // --width
px SVG width pixels (integer) // --height px SVG frame height pixels (integer) // --minwidth px
skip frames smaller than px (double) // --reverse generate stack-reversed FlameGraph / Call tree
Example: - To collect 30 second CPU profile of current process (returns FlameGraph svg) curl
"http://localhost:10002/prof" - To collect 1 minute CPU profile of current process and output in
tree format (html) curl "http://localhost:10002/prof?output=tree&amp;duration=60" - To collect 30
second heap allocation profile of current process (returns FlameGraph svg) curl
"http://localhost:10002/prof?event=alloc" - To collect lock contention profile of current process
(returns FlameGraph svg) curl "http://localhost:10002/prof?event=lock" Following event types are
supported (default is 'cpu') (NOTE: not all OS'es support all events) // Perf events: // cpu //
page-faults // context-switches // cycles // instructions // cache-references // cache-misses //
branches // branch-misses // bus-cycles // L1-dcache-load-misses // LLC-load-misses //
dTLB-load-misses // mem:breakpoint // trace:tracepoint // Java events: // alloc // lock
hbase-http/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java