You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by be...@apache.org on 2022/12/28 04:31:59 UTC

[incubator-streampark] 01/01: [Improve] remove jvm-profile plugin and flame-graph module

This is an automated email from the ASF dual-hosted git repository.

benjobs pushed a commit to branch liscense
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git

commit 8cc4daeb55bd3d7cc590143ac4ebfd822146ba23
Author: benjobs <be...@apache.org>
AuthorDate: Wed Dec 28 12:31:37 2022 +0800

    [Improve] remove jvm-profile plugin and flame-graph module
---
 .github/labeler.yml                                |    1 -
 .github/workflows/maven.yml                        |    2 +-
 build.sh                                           |    3 +-
 pom.xml                                            |    1 -
 .../streampark-console-service/pom.xml             |    6 -
 .../src/main/assembly/assembly.xml                 |    7 -
 .../src/main/assembly/bin/flame-graph/README.md    |  239 ----
 .../src/main/assembly/bin/flame-graph/aix-perf.pl  |   32 -
 .../main/assembly/bin/flame-graph/difffolded.pl    |  115 --
 .../src/main/assembly/bin/flame-graph/files.pl     |   64 -
 .../main/assembly/bin/flame-graph/flamegraph.pl    | 1235 --------------------
 .../src/main/assembly/bin/flame-graph/jmaps        |  121 --
 .../main/assembly/bin/flame-graph/pkgsplit-perf.pl |   90 --
 .../main/assembly/bin/flame-graph/range-perf.pl    |  139 ---
 .../main/assembly/bin/flame-graph/record-test.sh   |   39 -
 .../assembly/bin/flame-graph/stackcollapse-aix.pl  |   61 -
 .../bin/flame-graph/stackcollapse-bpftrace.pl      |   68 --
 .../bin/flame-graph/stackcollapse-elfutils.pl      |  102 --
 .../assembly/bin/flame-graph/stackcollapse-gdb.pl  |   74 --
 .../assembly/bin/flame-graph/stackcollapse-go.pl   |  154 ---
 .../bin/flame-graph/stackcollapse-instruments.pl   |   26 -
 .../flame-graph/stackcollapse-java-exceptions.pl   |   73 --
 .../bin/flame-graph/stackcollapse-jstack.pl        |  180 ---
 .../assembly/bin/flame-graph/stackcollapse-ljp.awk |   74 --
 .../bin/flame-graph/stackcollapse-perf-sched.awk   |  228 ----
 .../assembly/bin/flame-graph/stackcollapse-perf.pl |  358 ------
 .../assembly/bin/flame-graph/stackcollapse-pmc.pl  |   74 --
 .../bin/flame-graph/stackcollapse-recursive.pl     |   60 -
 .../bin/flame-graph/stackcollapse-sample.awk       |  231 ----
 .../assembly/bin/flame-graph/stackcollapse-stap.pl |   84 --
 .../bin/flame-graph/stackcollapse-vsprof.pl        |   98 --
 .../bin/flame-graph/stackcollapse-vtune.pl         |   76 --
 .../bin/flame-graph/stackcollapse-xdebug.php       |  197 ----
 .../main/assembly/bin/flame-graph/stackcollapse.pl |  109 --
 .../main/assembly/bin/flame-graph/stackcollapse.py |   49 -
 .../src/main/assembly/script/data/mysql-data.sql   |  185 ++-
 .../src/main/assembly/script/data/pgsql-data.sql   |  185 ++-
 .../main/assembly/script/schema/mysql-schema.sql   |   18 -
 .../main/assembly/script/schema/pgsql-schema.sql   |   26 -
 .../main/assembly/script/upgrade/mysql/2.0.0.sql   |  165 +--
 .../core/controller/ApplicationController.java     |    1 -
 .../console/core/controller/MetricsController.java |   54 -
 .../console/core/entity/Application.java           |    1 -
 .../streampark/console/core/entity/FlameGraph.java |   77 --
 .../console/core/mapper/FlameGraphMapper.java      |   26 -
 .../console/core/service/FlameGraphService.java    |   32 -
 .../core/service/impl/ApplicationServiceImpl.java  |   14 -
 .../core/service/impl/FlameGraphServiceImpl.java   |  106 --
 .../streampark/console/core/task/MetricsTask.java  |   65 --
 .../system/controller/AccessTokenController.java   |    1 -
 .../src/main/resources/db/data-h2.sql              |    3 +-
 .../src/main/resources/db/schema-h2.sql            |   13 -
 .../resources/mapper/core/ApplicationMapper.xml    |    1 -
 .../resources/mapper/core/FlameGraphMapper.xml     |   27 -
 .../core/service/ApplicationServiceTest.java       |    2 -
 .../src/api/flink/app/app.type.ts                  |    1 -
 .../src/api/flink/app/metrics.ts                   |   45 -
 .../api/flink/setting/types/flinkCluster.type.ts   |    1 -
 .../src/locales/lang/en/flink/app.ts               |    1 -
 .../src/locales/lang/zh-CN/flink/app.ts            |    1 -
 .../components/AppView/StartApplicationModal.vue   |   13 -
 .../src/views/flink/app/hooks/useAppTableAction.ts |   28 -
 .../flink/submit/bean/SubmitRequest.scala          |    1 -
 .../flink/submit/trait/FlinkSubmitTrait.scala      |   19 -
 streampark-plugin/pom.xml                          |   72 --
 .../streampark-jvm-profiler/.travis.yml            |   22 -
 .../streampark-jvm-profiler/metricDetails.md       |  169 ---
 streampark-plugin/streampark-jvm-profiler/pom.xml  |  250 ----
 .../apache/streampark/plugin/profiling/Agent.java  |   43 -
 .../streampark/plugin/profiling/AgentImpl.java     |  267 -----
 .../plugin/profiling/AgentThreadFactory.java       |   38 -
 .../streampark/plugin/profiling/ArgumentUtils.java |   52 -
 .../streampark/plugin/profiling/Arguments.java     |  360 ------
 .../plugin/profiling/ConfigProvider.java           |   32 -
 .../streampark/plugin/profiling/Profiler.java      |   35 -
 .../streampark/plugin/profiling/ProfilerGroup.java |   39 -
 .../plugin/profiling/ProfilerRunner.java           |   49 -
 .../streampark/plugin/profiling/Reporter.java      |   31 -
 .../plugin/profiling/ShutdownHookRunner.java       |   94 --
 .../plugin/profiling/YamlConfigProvider.java       |  204 ----
 .../profiling/example/HelloWorldApplication.java   |   77 --
 .../plugin/profiling/profiler/Constants.java       |   27 -
 .../profiling/profiler/CpuAndMemoryProfiler.java   |  274 -----
 .../plugin/profiling/profiler/IOProfiler.java      |  101 --
 .../profiler/MethodArgumentCollector.java          |   40 -
 .../profiling/profiler/MethodArgumentProfiler.java |  104 --
 .../profiler/MethodDurationCollector.java          |   33 -
 .../profiling/profiler/MethodDurationProfiler.java |  122 --
 .../profiling/profiler/ProcessInfoProfiler.java    |  186 ---
 .../plugin/profiling/profiler/ProfilerBase.java    |  118 --
 .../profiler/StacktraceCollectorProfiler.java      |  120 --
 .../profiler/StacktraceReporterProfiler.java       |  123 --
 .../profiling/profiler/ThreadInfoProfiler.java     |  122 --
 .../profiling/reporter/ConsoleOutputReporter.java  |   38 -
 .../plugin/profiling/reporter/HttpReporter.java    |   78 --
 .../transformer/JavaAgentFileTransformer.java      |  185 ---
 .../transformer/MethodProfilerStaticProxy.java     |   63 -
 .../plugin/profiling/util/AgentLogger.java         |  108 --
 .../plugin/profiling/util/ClassAndMethod.java      |   68 --
 .../profiling/util/ClassAndMethodFilter.java       |   60 -
 .../util/ClassAndMethodLongMetricBuffer.java       |   44 -
 .../profiling/util/ClassAndMethodMetricKey.java    |   66 --
 .../plugin/profiling/util/ClassMethodArgument.java |   89 --
 .../profiling/util/ClassMethodArgumentFilter.java  |   64 -
 .../util/ClassMethodArgumentMetricBuffer.java      |   45 -
 .../plugin/profiling/util/DummyConfigProvider.java |   31 -
 .../plugin/profiling/util/ErrorLogReporter.java    |   24 -
 .../util/ExponentialBackoffRetryPolicy.java        |   85 --
 .../plugin/profiling/util/Histogram.java           |   52 -
 .../plugin/profiling/util/NoopConfigProvider.java  |   39 -
 .../plugin/profiling/util/ProcFileUtils.java       |  170 ---
 .../plugin/profiling/util/ProcessUtils.java        |  111 --
 .../plugin/profiling/util/ReflectionUtils.java     |   94 --
 .../plugin/profiling/util/SparkAppCmdInfo.java     |   68 --
 .../plugin/profiling/util/SparkUtils.java          |   91 --
 .../plugin/profiling/util/Stacktrace.java          |   74 --
 .../profiling/util/StacktraceMetricBuffer.java     |   51 -
 .../plugin/profiling/util/StringUtils.java         |  239 ----
 .../streampark/plugin/profiling/util/Utils.java    |  108 --
 .../streampark/plugin/profiling/AgentITCase.java   |  317 -----
 .../plugin/profiling/AgentThreadFactoryTest.java   |   46 -
 .../streampark/plugin/profiling/ArgumentsTest.java |  274 -----
 .../plugin/profiling/ProfilerRunnableTest.java     |   53 -
 .../plugin/profiling/YamlConfigProviderTest.java   |  146 ---
 .../profiler/CpuAndMemoryProfilerTest.java         |   71 --
 .../profiler/MethodArgumentProfilerTest.java       |   93 --
 .../profiler/MethodDurationProfilerTest.java       |  116 --
 .../profiler/ProcessInfoProfilerTest.java          |   96 --
 .../profiler/StacktraceCollectorProfilerTest.java  |  279 -----
 .../profiler/StacktraceReporterProfilerTest.java   |  117 --
 .../profiling/profiler/ThreadInfoProfilerTest.java |   68 --
 .../reporter/ConsoleOutputReporterTest.java        |   31 -
 .../transformer/MethodProfilerStaticProxyTest.java |   83 --
 .../profiling/util/ClassAndMethodFilterTest.java   |  114 --
 .../util/ClassAndMethodMetricBufferTest.java       |  132 ---
 .../util/ClassMethodArgmentMetricBufferTest.java   |   99 --
 .../util/ClassMethodArgumentFilterTest.java        |  130 ---
 .../plugin/profiling/util/IOUtilsTest.java         |   36 -
 .../plugin/profiling/util/ProcFileUtilsTest.java   |  391 -------
 .../plugin/profiling/util/ReflectionUtilsTest.java |   48 -
 .../plugin/profiling/util/SparkUtilsTest.java      |   46 -
 .../profiling/util/StacktraceMetricBufferTest.java |  252 ----
 .../plugin/profiling/util/StringUtilsTest.java     |  164 ---
 143 files changed, 278 insertions(+), 13855 deletions(-)

diff --git a/.github/labeler.yml b/.github/labeler.yml
index f4a0a5a52..448708458 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -45,7 +45,6 @@ WEB UI:
 BACKEND:
   - "streampark-console/streampark-console-service/**/*"
   - "streampark-common/**/*"
-  - "streampark-plugin/**/*"
 
 FLINK:
   - "streampark-flink/**/*"
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 8f387a392..663170ede 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -95,5 +95,5 @@ jobs:
       - name: Build with Maven
         run: ./mvnw -B clean package -P${{ matrix.scala }} -Pconsole -DskipTests
       - name: Test with Maven
-        run: ./mvnw -B test -P${{ matrix.scala }} -Pconsole -pl '!streampark-plugin/streampark-jvm-profiler,!streampark-console/streampark-console-service' -am
+        run: ./mvnw -B test -P${{ matrix.scala }} -Pconsole -pl '!streampark-console/streampark-console-service' -am
 
diff --git a/build.sh b/build.sh
index 19f585c3c..196527d21 100755
--- a/build.sh
+++ b/build.sh
@@ -208,8 +208,7 @@ detachedPackage () {
     Next, you need to build front-end by yourself.
 
      1) cd $(cd "$PRG_DIR" &>/dev/null && pwd)/streampark-console/streampark-console-webapp
-     2) pnpm install
-     3) pnpm build
+     2) pnpm install && pnpm build
 
     please visit: https://streampark.apache.org/docs/user-guide/deployment for more detail. \n"""
   fi
diff --git a/pom.xml b/pom.xml
index a4694f42d..bc882981c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -970,7 +970,6 @@
         <profile>
             <id>console</id>
             <modules>
-                <module>streampark-plugin</module>
                 <module>streampark-storage</module>
                 <module>streampark-console</module>
             </modules>
diff --git a/streampark-console/streampark-console-service/pom.xml b/streampark-console/streampark-console-service/pom.xml
index 1ae2aca8d..ad39e4154 100644
--- a/streampark-console/streampark-console-service/pom.xml
+++ b/streampark-console/streampark-console-service/pom.xml
@@ -353,12 +353,6 @@
             <version>${project.version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.streampark</groupId>
-            <artifactId>streampark-jvm-profiler</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.streampark</groupId>
             <artifactId>streampark-flink-kubernetes_${scala.binary.version}</artifactId>
diff --git a/streampark-console/streampark-console-service/src/main/assembly/assembly.xml b/streampark-console/streampark-console-service/src/main/assembly/assembly.xml
index 84e3dee99..b6d1b0eb3 100644
--- a/streampark-console/streampark-console-service/src/main/assembly/assembly.xml
+++ b/streampark-console/streampark-console-service/src/main/assembly/assembly.xml
@@ -29,17 +29,10 @@
             <useProjectArtifact>true</useProjectArtifact>
             <outputDirectory>lib</outputDirectory>
             <excludes>
-                <exclude>org.apache.streampark:streampark-jvm-profiler</exclude>
                 <exclude>org.apache.streampark:streampark-flink-sqlclient_${scala.binary.version}</exclude>
                 <exclude>javax.servlet:servlet-api</exclude>
             </excludes>
         </dependencySet>
-        <dependencySet>
-            <outputDirectory>plugins</outputDirectory>
-            <includes>
-                <include>org.apache.streampark:streampark-jvm-profiler</include>
-            </includes>
-        </dependencySet>
         <dependencySet>
             <outputDirectory>client</outputDirectory>
             <includes>
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/README.md b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/README.md
deleted file mode 100644
index 4e34b0ad7..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/README.md
+++ /dev/null
@@ -1,239 +0,0 @@
-# Flame Graphs visualize profiled code
-
-Main Website: http://www.brendangregg.com/flamegraphs.html
-
-Example (click to zoom):
-
-[![Example](http://www.brendangregg.com/FlameGraphs/cpu-bash-flamegraph.svg)](http://www.brendangregg.com/FlameGraphs/cpu-bash-flamegraph.svg)
-
-Click a box to zoom the Flame Graph to this stack frame only. To search and highlight all stack frames matching a
-regular expression, click the _search_ button in the upper right corner or press Ctrl-F. By default, search is case
-sensitive, but this can be toggled by pressing Ctrl-I or by clicking the _ic_ button in the upper right corner.
-
-Other sites:
-
-- The Flame Graph article in ACMQ and
-  CACM: http://queue.acm.org/detail.cfm?id=2927301 http://cacm.acm.org/magazines/2016/6/202665-the-flame-graph/abstract
-- CPU profiling using Linux perf\_events, DTrace, SystemTap, or
-  ktap: http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
-- CPU profiling using XCode Instruments: http://schani.wordpress.com/2012/11/16/flame-graphs-for-instruments/
-- CPU profiling using
-  Xperf.exe: http://randomascii.wordpress.com/2013/03/26/summarizing-xperf-cpu-usage-with-flame-graphs/
-- Memory profiling: http://www.brendangregg.com/FlameGraphs/memoryflamegraphs.html
-- Other examples, updates, and news: http://www.brendangregg.com/flamegraphs.html#Updates
-
-Flame graphs can be created in three steps:
-
-1. Capture stacks
-2. Fold stacks
-3. flamegraph.pl
-
-1\. Capture stacks
-=================
-Stack samples can be captured using Linux perf\_events, FreeBSD pmcstat (hwpmc), DTrace, SystemTap, and many other
-profilers. See the stackcollapse-\* converters.
-
-### Linux perf\_events
-
-Using Linux perf\_events (aka "perf") to capture 60 seconds of 99 Hertz stack samples, both user- and kernel-level
-stacks, all processes:
-
-```
-# perf record -F 99 -a -g -- sleep 60
-# perf script > out.perf
-```
-
-Now only capturing PID 181:
-
-```
-# perf record -F 99 -p 181 -g -- sleep 60
-# perf script > out.perf
-```
-
-### DTrace
-
-Using DTrace to capture 60 seconds of kernel stacks at 997 Hertz:
-
-```
-# dtrace -x stackframes=100 -n 'profile-997 /arg0/ { @[stack()] = count(); } tick-60s { exit(0); }' -o out.kern_stacks
-```
-
-Using DTrace to capture 60 seconds of user-level stacks for PID 12345 at 97 Hertz:
-
-```
-# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345 && arg1/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
-```
-
-60 seconds of user-level stacks, including time spent in-kernel, for PID 12345 at 97 Hertz:
-
-```
-# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
-```
-
-Switch `ustack()` for `jstack()` if the application has a ustack helper to include translated frames (eg, node.js
-frames; see: http://dtrace.org/blogs/dap/2012/01/05/where-does-your-node-program-spend-its-time/). The rate for
-user-level stack collection is deliberately slower than kernel, which is especially important when using `jstack()` as
-it performs additional work to translate frames.
-
-2\. Fold stacks
-==============
-Use the stackcollapse programs to fold stack samples into single lines. The programs provided are:
-
-- `stackcollapse.pl`: for DTrace stacks
-- `stackcollapse-perf.pl`: for Linux perf_events "perf script" output
-- `stackcollapse-pmc.pl`: for FreeBSD pmcstat -G stacks
-- `stackcollapse-stap.pl`: for SystemTap stacks
-- `stackcollapse-instruments.pl`: for XCode Instruments
-- `stackcollapse-vtune.pl`: for Intel VTune profiles
-- `stackcollapse-ljp.awk`: for Lightweight Java Profiler
-- `stackcollapse-jstack.pl`: for Java jstack(1) output
-- `stackcollapse-gdb.pl`: for gdb(1) stacks
-- `stackcollapse-go.pl`: for Golang pprof stacks
-- `stackcollapse-vsprof.pl`: for Microsoft Visual Studio profiles
-
-Usage example:
-
-```
-For perf_events:
-$ ./stackcollapse-perf.pl out.perf > out.folded
-
-For DTrace:
-$ ./stackcollapse.pl out.kern_stacks > out.kern_folded
-```
-
-The output looks like this:
-
-```
-unix`_sys_sysenter_post_swapgs 1401
-unix`_sys_sysenter_post_swapgs;genunix`close 5
-unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf 85
-unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;c2audit`audit_closef 26
-unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;c2audit`audit_setf 5
-unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`audit_getstate 6
-unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`audit_unfalloc 2
-unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`closef 48
-[...]
-```
-
-3\. flamegraph.pl
-================
-Use flamegraph.pl to render a SVG.
-
-```
-$ ./flamegraph.pl out.kern_folded > kernel.svg
-```
-
-An advantage of having the folded input file (and why this is separate to flamegraph.pl) is that you can use grep for
-functions of interest. Eg:
-
-```
-$ grep cpuid out.kern_folded | ./flamegraph.pl > cpuid.svg
-```
-
-Provided Examples
-=================
-
-### Linux perf\_events
-
-An example output from Linux "perf script" is included, gzip'd, as example-perf-stacks.txt.gz. The resulting flame graph
-is example-perf.svg:
-
-[![Example](http://www.brendangregg.com/FlameGraphs/example-perf.svg)](http://www.brendangregg.com/FlameGraphs/example-perf.svg)
-
-You can create this using:
-
-```
-$ gunzip -c example-perf-stacks.txt.gz | ./stackcollapse-perf.pl --all | ./flamegraph.pl --color=java --hash > example-perf.svg
-```
-
-This shows my typical workflow: I'll gzip profiles on the target, then copy them to my laptop for analysis. Since I have
-hundreds of profiles, I leave them gzip'd!
-
-Since this profile included Java, I used the flamegraph.pl --color=java palette. I've also used stackcollapse-perf.pl
---all, which includes all annotations that help flamegraph.pl use separate colors for kernel and user level code. The
-resulting flame graph uses: green == Java, yellow == C++, red == user-mode native, orange == kernel.
-
-This profile was from an analysis of vert.x performance. The benchmark client, wrk, is also visible in the flame graph.
-
-### DTrace
-
-An example output from DTrace is also included, example-dtrace-stacks.txt, and the resulting flame graph,
-example-dtrace.svg:
-
-[![Example](http://www.brendangregg.com/FlameGraphs/example-dtrace.svg)](http://www.brendangregg.com/FlameGraphs/example-dtrace.svg)
-
-You can generate this using:
-
-```
-$ ./stackcollapse.pl example-stacks.txt | ./flamegraph.pl > example.svg
-```
-
-This was from a particular performance investigation: the Flame Graph identified that CPU time was spent in the lofs
-module, and quantified that time.
-
-
-Options
-=======
-See the USAGE message (--help) for options:
-
-USAGE: ./flamegraph.pl [options] infile > outfile.svg
-
-	--title TEXT     # change title text
-	--subtitle TEXT  # second level title (optional)
-	--width NUM      # width of image (default 1200)
-	--height NUM     # height of each frame (default 16)
-	--minwidth NUM   # omit smaller functions (default 0.1 pixels)
-	--fonttype FONT  # font type (default "Verdana")
-	--fontsize NUM   # font size (default 12)
-	--countname TEXT # count type label (default "samples")
-	--nametype TEXT  # name type label (default "Function:")
-	--colors PALETTE # set color palette. choices are: hot (default), mem,
-	                 # io, wakeup, chain, java, js, perl, red, green, blue,
-	                 # aqua, yellow, purple, orange
-	--bgcolors COLOR # set background colors. gradient choices are yellow
-	                 # (default), blue, green, grey; flat colors use "#rrggbb"
-	--hash           # colors are keyed by function name hash
-	--cp             # use consistent palette (palette.map)
-	--reverse        # generate stack-reversed flame graph
-	--inverted       # icicle graph
-	--flamechart     # produce a flame chart (sort by time, do not merge stacks)
-	--negate         # switch differential hues (blue<->red)
-	--notes TEXT     # add notes comment in SVG (for debugging)
-	--help           # this message
-
-	eg,
-	./flamegraph.pl --title="Flame Graph: malloc()" trace.txt > graph.svg
-
-As suggested in the example, flame graphs can process traces of any event, such as malloc()s, provided stack traces are
-gathered.
-
-
-Consistent Palette
-==================
-If you use the `--cp` option, it will use the $colors selection and randomly generate the palette like normal. Any
-future flamegraphs created using the `--cp`
-option will use the same palette map. Any new symbols from future flamegraphs will have their colors randomly generated
-using the $colors selection.
-
-If you don't like the palette, just delete the palette.map file.
-
-This allows your to change your colorscheme between flamegraphs to make the differences REALLY stand out.
-
-Example:
-
-Say we have 2 captures, one with a problem, and one when it was working
-(whatever "it" is):
-
-```
-cat working.folded | ./flamegraph.pl --cp > working.svg
-# this generates a palette.map, as per the normal random generated look.
-
-cat broken.folded | ./flamegraph.pl --cp --colors mem > broken.svg
-# this svg will use the same palette.map for the same events, but a very
-# different colorscheme for any new events.
-```
-
-Take a look at the demo directory for an example:
-
-palette-example-working.svg  
-palette-example-broken.svg
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/aix-perf.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/aix-perf.pl
deleted file mode 100644
index 7bb0bad99..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/aix-perf.pl
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/perl
-
-use Getopt::Std;
-
-getopt('urt');
-
-unless ($opt_r && $opt_t) {
-    print "Usage: $0 [ -u user] -r sample_count -t sleep_time\n";
-    exit(0);
-}
-
-my $i;
-my @proc = "";
-for ($i = 0; $i < $opt_r; $i++) {
-    if ($opt_u) {
-        $proc = `/usr/sysv/bin/ps -u $opt_u `;
-        $proc =~ s/^.*\n//;
-        $proc =~ s/\s*(\d+).*\n/\1 /g;
-        @proc = split(/\s+/, $proc);
-    }
-    else {
-        opendir(my $dh, '/proc') || die "Cant't open /proc: $!";
-        @proc = grep {/^[\d]+$/} readdir($dh);
-        closedir($dh);
-    }
-
-    foreach my $pid (@proc) {
-        my $command = "/usr/bin/procstack $pid";
-        print `$command 2>/dev/null`;
-    }
-    select(undef, undef, undef, $opt_t);
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/difffolded.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/difffolded.pl
deleted file mode 100644
index 94f558f43..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/difffolded.pl
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/perl -w
-#
-# difffolded.pl 	diff two folded stack files. Use this for generating
-#			flame graph differentials.
-#
-# USAGE: ./difffolded.pl [-hns] folded1 folded2 | ./flamegraph.pl > diff2.svg
-#
-# Options are described in the usage message (-h).
-#
-# The flamegraph will be colored based on higher samples (red) and smaller
-# samples (blue). The frame widths will be based on the 2nd folded file.
-# This might be confusing if stack frames disappear entirely; it will make
-# the most sense to ALSO create a differential based on the 1st file widths,
-# while switching the hues; eg:
-#
-#  ./difffolded.pl folded2 folded1 | ./flamegraph.pl --negate > diff1.svg
-#
-# Here's what they mean when comparing a before and after profile:
-#
-# diff1.svg: widths show the before profile, colored by what WILL happen
-# diff2.svg: widths show the after profile, colored by what DID happen
-#
-# INPUT: See stackcollapse* programs.
-#
-# OUTPUT: The full list of stacks, with two columns, one from each file.
-# If a stack wasn't present in a file, the column value is zero.
-#
-# folded_stack_trace count_from_folded1 count_from_folded2
-#
-# eg:
-#
-# funca;funcb;funcc 31 33
-# ...
-#
-# COPYRIGHT: Copyright (c) 2014 Brendan Gregg.
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-#  (http://www.gnu.org/copyleft/gpl.html)
-#
-# 28-Oct-2014	Brendan Gregg	Created this.
-
-use strict;
-use Getopt::Std;
-
-# defaults
-my $normalize = 0; # make sample counts equal
-my $striphex = 0;  # strip hex numbers
-
-sub usage {
-    print STDERR <<USAGE_END;
-USAGE: $0 [-hns] folded1 folded2 | flamegraph.pl > diff2.svg
-	    -h       # help message
-	    -n       # normalize sample counts
-	    -s       # strip hex numbers (addresses)
-See stackcollapse scripts for generating folded files.
-Also consider flipping the files and hues to highlight reduced paths:
-$0 folded2 folded1 | ./flamegraph.pl --negate > diff1.svg
-USAGE_END
-    exit 2;
-}
-
-usage() if @ARGV < 2;
-our ($opt_h, $opt_n, $opt_s);
-getopts('ns') or usage();
-usage() if $opt_h;
-$normalize = 1 if defined $opt_n;
-$striphex = 1 if defined $opt_s;
-
-my ($total1, $total2) = (0, 0);
-my %Folded;
-
-my $file1 = $ARGV[0];
-my $file2 = $ARGV[1];
-
-open FILE, $file1 or die "ERROR: Can't read $file1\n";
-while (<FILE>) {
-    chomp;
-    my ($stack, $count) = (/^(.*)\s+?(\d+(?:\.\d*)?)$/);
-    $stack =~ s/0x[0-9a-fA-F]+/0x.../g if $striphex;
-    $Folded{$stack}{1} += $count;
-    $total1 += $count;
-}
-close FILE;
-
-open FILE, $file2 or die "ERROR: Can't read $file2\n";
-while (<FILE>) {
-    chomp;
-    my ($stack, $count) = (/^(.*)\s+?(\d+(?:\.\d*)?)$/);
-    $stack =~ s/0x[0-9a-fA-F]+/0x.../g if $striphex;
-    $Folded{$stack}{2} += $count;
-    $total2 += $count;
-}
-close FILE;
-
-foreach my $stack (keys %Folded) {
-    $Folded{$stack}{1} = 0 unless defined $Folded{$stack}{1};
-    $Folded{$stack}{2} = 0 unless defined $Folded{$stack}{2};
-    if ($normalize && $total1 != $total2) {
-        $Folded{$stack}{1} = int($Folded{$stack}{1} * $total2 / $total1);
-    }
-    print "$stack $Folded{$stack}{1} $Folded{$stack}{2}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/files.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/files.pl
deleted file mode 100644
index 7fc299508..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/files.pl
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/perl -w
-#
-# files.pl	Print file sizes in folded format, for a flame graph.
-#
-# This helps you understand storage consumed by a file system, by creating
-# a flame graph visualization of space consumed. This is basically a Perl
-# version of the "find" command, which emits in folded format for piping
-# into flamegraph.pl.
-#
-# Copyright (c) 2017 Brendan Gregg.
-# Licensed under the Apache License, Version 2.0 (the "License")
-#
-# 03-Feb-2017   Brendan Gregg   Created this.
-
-use strict;
-use File::Find;
-
-sub usage {
-    print STDERR "USAGE: $0 [--xdev] [DIRECTORY]...\n";
-    print STDERR "   eg, $0 /Users\n";
-    print STDERR "   To not descend directories on other filesystems:";
-    print STDERR "   eg, $0 --xdev /\n";
-    print STDERR "Intended to be piped to flamegraph.pl. Full example:\n";
-    print STDERR "   $0 /Users | flamegraph.pl " .
-        "--hash --countname=bytes > files.svg\n";
-    print STDERR "   $0 /usr /home /root /etc | flamegraph.pl " .
-        "--hash --countname=bytes > files.svg\n";
-    print STDERR "   $0 --xdev / | flamegraph.pl " .
-        "--hash --countname=bytes > files.svg\n";
-    exit 1;
-}
-
-usage() if @ARGV == 0 or $ARGV[0] eq "--help" or $ARGV[0] eq "-h";
-
-my $filter_xdev = 0;
-my $xdev_id;
-
-foreach my $dir (@ARGV) {
-    if ($dir eq "--xdev") {
-        $filter_xdev = 1;
-    }
-    else {
-        find(\&wanted, $dir);
-    }
-}
-
-sub wanted {
-    my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size) = lstat($_);
-    return unless defined $size;
-    if ($filter_xdev) {
-        if (!$xdev_id) {
-            $xdev_id = $dev;
-        }
-        elsif ($xdev_id ne $dev) {
-            $File::Find::prune = 1;
-            return;
-        }
-    }
-    my $path = $File::Find::name;
-    $path =~ tr/\//;/;            # delimiter
-    $path =~ tr/;.a-zA-Z0-9-/_/c; # ditch whitespace and other chars
-    $path =~ s/^;//;
-    print "$path $size\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/flamegraph.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/flamegraph.pl
deleted file mode 100644
index b7e301f71..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/flamegraph.pl
+++ /dev/null
@@ -1,1235 +0,0 @@
-#!/usr/bin/perl -w
-#
-# flamegraph.pl		flame stack grapher.
-#
-# This takes stack samples and renders a call graph, allowing hot functions
-# and codepaths to be quickly identified.  Stack samples can be generated using
-# tools such as DTrace, perf, SystemTap, and Instruments.
-#
-# USAGE: ./flamegraph.pl [options] input.txt > graph.svg
-#
-#        grep funcA input.txt | ./flamegraph.pl [options] > graph.svg
-#
-# Then open the resulting .svg in a web browser, for interactivity: mouse-over
-# frames for info, click to zoom, and ctrl-F to search.
-#
-# Options are listed in the usage message (--help).
-#
-# The input is stack frames and sample counts formatted as single lines.  Each
-# frame in the stack is semicolon separated, with a space and count at the end
-# of the line.  These can be generated for Linux perf script output using
-# stackcollapse-perf.pl, for DTrace using stackcollapse.pl, and for other tools
-# using the other stackcollapse programs.  Example input:
-#
-#  swapper;start_kernel;rest_init;cpu_idle;default_idle;native_safe_halt 1
-#
-# An optional extra column of counts can be provided to generate a differential
-# flame graph of the counts, colored red for more, and blue for less.  This
-# can be useful when using flame graphs for non-regression testing.
-# See the header comment in the difffolded.pl program for instructions.
-#
-# The input functions can optionally have annotations at the end of each
-# function name, following a precedent by some tools (Linux perf's _[k]):
-# 	_[k] for kernel
-#	_[i] for inlined
-#	_[j] for jit
-#	_[w] for waker
-# Some of the stackcollapse programs support adding these annotations, eg,
-# stackcollapse-perf.pl --kernel --jit. They are used merely for colors by
-# some palettes, eg, flamegraph.pl --color=java.
-#
-# The output flame graph shows relative presence of functions in stack samples.
-# The ordering on the x-axis has no meaning; since the data is samples, time
-# order of events is not known.  The order used sorts function names
-# alphabetically.
-#
-# While intended to process stack samples, this can also process stack traces.
-# For example, tracing stacks for memory allocation, or resource usage.  You
-# can use --title to set the title to reflect the content, and --countname
-# to change "samples" to "bytes" etc.
-#
-# There are a few different palettes, selectable using --color.  By default,
-# the colors are selected at random (except for differentials).  Functions
-# called "-" will be printed gray, which can be used for stack separators (eg,
-# between user and kernel stacks).
-#
-# HISTORY
-#
-# This was inspired by Neelakanth Nadgir's excellent function_call_graph.rb
-# program, which visualized function entry and return trace events.  As Neel
-# wrote: "The output displayed is inspired by Roch's CallStackAnalyzer which
-# was in turn inspired by the work on vftrace by Jan Boerhout".  See:
-# https://blogs.oracle.com/realneel/entry/visualizing_callstacks_via_dtrace_and
-#
-# Copyright 2016 Netflix, Inc.
-# Copyright 2011 Joyent, Inc.  All rights reserved.
-# Copyright 2011 Brendan Gregg.  All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# 11-Oct-2014	Adrien Mahieux	Added zoom.
-# 21-Nov-2013   Shawn Sterling  Added consistent palette file option
-# 17-Mar-2013   Tim Bunce       Added options and more tunables.
-# 15-Dec-2011	Dave Pacheco	Support for frames with whitespace.
-# 10-Sep-2011	Brendan Gregg	Created this.
-
-use strict;
-
-use Getopt::Long;
-
-use open qw(:std :utf8);
-
-# tunables
-my $encoding;
-my $fonttype = "Verdana";
-my $imagewidth = 1200;              # max width, pixels
-my $frameheight = 16;               # max height is dynamic
-my $fontsize = 12;                  # base text size
-my $fontwidth = 0.59;               # avg width relative to fontsize
-my $minwidth = 0.1;                 # min function width, pixels
-my $nametype = "Function:";         # what are the names in the data?
-my $countname = "samples";          # what are the counts in the data?
-my $colors = "hot";                 # color theme
-my $bgcolors = "";                  # background color theme
-my $nameattrfile;                   # file holding function attributes
-my $timemax;                        # (override the) sum of the counts
-my $factor = 1;                     # factor to scale counts by
-my $hash = 0;                       # color by function name
-my $palette = 0;                    # if we use consistent palettes (default off)
-my %palette_map;                    # palette map hash
-my $pal_file = "palette.map";       # palette map file name
-my $stackreverse = 0;               # reverse stack order, switching merge end
-my $inverted = 0;                   # icicle graph
-my $flamechart = 0;                 # produce a flame chart (sort by time, do not merge stacks)
-my $negate = 0;                     # switch differential hues
-my $titletext = "";                 # centered heading
-my $titledefault = "Flame Graph";   # overwritten by --title
-my $titleinverted = "Icicle Graph"; #   "    "
-my $searchcolor = "rgb(230,0,230)"; # color for search highlighting
-my $notestext = "";                 # embedded notes in SVG
-my $subtitletext = "";              # second level title (optional)
-my $help = 0;
-
-sub usage {
-    die <<USAGE_END;
-USAGE: $0 [options] infile > outfile.svg\n
-	--title TEXT     # change title text
-	--subtitle TEXT  # second level title (optional)
-	--width NUM      # width of image (default 1200)
-	--height NUM     # height of each frame (default 16)
-	--minwidth NUM   # omit smaller functions (default 0.1 pixels)
-	--fonttype FONT  # font type (default "Verdana")
-	--fontsize NUM   # font size (default 12)
-	--countname TEXT # count type label (default "samples")
-	--nametype TEXT  # name type label (default "Function:")
-	--colors PALETTE # set color palette. choices are: hot (default), mem,
-	                 # io, wakeup, chain, java, js, perl, red, green, blue,
-	                 # aqua, yellow, purple, orange
-	--bgcolors COLOR # set background colors. gradient choices are yellow
-	                 # (default), blue, green, grey; flat colors use "#rrggbb"
-	--hash           # colors are keyed by function name hash
-	--cp             # use consistent palette (palette.map)
-	--reverse        # generate stack-reversed flame graph
-	--inverted       # icicle graph
-	--flamechart     # produce a flame chart (sort by time, do not merge stacks)
-	--negate         # switch differential hues (blue<->red)
-	--notes TEXT     # add notes comment in SVG (for debugging)
-	--help           # this message
-
-	eg,
-	$0 --title="Flame Graph: malloc()" trace.txt > graph.svg
-USAGE_END
-}
-
-GetOptions(
-    'fonttype=s'  => \$fonttype,
-    'width=i'     => \$imagewidth,
-    'height=i'    => \$frameheight,
-    'encoding=s'  => \$encoding,
-    'fontsize=f'  => \$fontsize,
-    'fontwidth=f' => \$fontwidth,
-    'minwidth=f'  => \$minwidth,
-    'title=s'     => \$titletext,
-    'subtitle=s'  => \$subtitletext,
-    'nametype=s'  => \$nametype,
-    'countname=s' => \$countname,
-    'nameattr=s'  => \$nameattrfile,
-    'total=s'     => \$timemax,
-    'factor=f'    => \$factor,
-    'colors=s'    => \$colors,
-    'bgcolors=s'  => \$bgcolors,
-    'hash'        => \$hash,
-    'cp'          => \$palette,
-    'reverse'     => \$stackreverse,
-    'inverted'    => \$inverted,
-    'flamechart'  => \$flamechart,
-    'negate'      => \$negate,
-    'notes=s'     => \$notestext,
-    'help'        => \$help,
-) or usage();
-$help && usage();
-
-# internals
-my $ypad1 = $fontsize * 3;      # pad top, include title
-my $ypad2 = $fontsize * 2 + 10; # pad bottom, include labels
-my $ypad3 = $fontsize * 2;      # pad top, include subtitle (optional)
-my $xpad = 10;                  # pad lefm and right
-my $framepad = 1;               # vertical padding for frames
-my $depthmax = 0;
-my %Events;
-my %nameattr;
-
-if ($flamechart && $titletext eq "") {
-    $titletext = "Flame Chart";
-}
-
-if ($titletext eq "") {
-    unless ($inverted) {
-        $titletext = $titledefault;
-    }
-    else {
-        $titletext = $titleinverted;
-    }
-}
-
-if ($nameattrfile) {
-    # The name-attribute file format is a function name followed by a tab then
-    # a sequence of tab separated name=value pairs.
-    open my $attrfh, $nameattrfile or die "Can't read $nameattrfile: $!\n";
-    while (<$attrfh>) {
-        chomp;
-        my ($funcname, $attrstr) = split /\t/, $_, 2;
-        die "Invalid format in $nameattrfile" unless defined $attrstr;
-        $nameattr{$funcname} = { map {split /=/, $_, 2} split /\t/, $attrstr };
-    }
-}
-
-if ($notestext =~ /[<>]/) {
-    die "Notes string can't contain < or >"
-}
-
-# background colors:
-# - yellow gradient: default (hot, java, js, perl)
-# - green gradient: mem
-# - blue gradient: io, wakeup, chain
-# - gray gradient: flat colors (red, green, blue, ...)
-if ($bgcolors eq "") {
-    # choose a default
-    if ($colors eq "mem") {
-        $bgcolors = "green";
-    }
-    elsif ($colors =~ /^(io|wakeup|chain)$/) {
-        $bgcolors = "blue";
-    }
-    elsif ($colors =~ /^(red|green|blue|aqua|yellow|purple|orange)$/) {
-        $bgcolors = "grey";
-    }
-    else {
-        $bgcolors = "yellow";
-    }
-}
-my ($bgcolor1, $bgcolor2);
-if ($bgcolors eq "yellow") {
-    $bgcolor1 = "#eeeeee"; # background color gradient start
-    $bgcolor2 = "#eeeeb0"; # background color gradient stop
-}
-elsif ($bgcolors eq "blue") {
-    $bgcolor1 = "#eeeeee";
-    $bgcolor2 = "#e0e0ff";
-}
-elsif ($bgcolors eq "green") {
-    $bgcolor1 = "#eef2ee";
-    $bgcolor2 = "#e0ffe0";
-}
-elsif ($bgcolors eq "grey") {
-    $bgcolor1 = "#f8f8f8";
-    $bgcolor2 = "#e8e8e8";
-}
-elsif ($bgcolors =~ /^#......$/) {
-    $bgcolor1 = $bgcolor2 = $bgcolors;
-}
-else {
-    die "Unrecognized bgcolor option \"$bgcolors\""
-}
-
-# SVG functions
-{package SVG;
-sub new {
-    my $class = shift;
-    my $self = {};
-    bless($self, $class);
-    return $self;
-}
-
-sub header {
-    my ($self, $w, $h) = @_;
-    my $enc_attr = '';
-    if (defined $encoding) {
-        $enc_attr = qq{ encoding="$encoding"};
-    }
-    $self->{svg} .= <<SVG;
-<?xml version="1.0"$enc_attr standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" width="$w" height="$h" onload="init(evt)" viewBox="0 0 $w $h" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
-<!-- NOTES: $notestext -->
-SVG
-}
-
-sub include {
-    my ($self, $content) = @_;
-    $self->{svg} .= $content;
-}
-
-sub colorAllocate {
-    my ($self, $r, $g, $b) = @_;
-    return "rgb($r,$g,$b)";
-}
-
-sub group_start {
-    my ($self, $attr) = @_;
-
-    my @g_attr = map {
-        exists $attr->{$_} ? sprintf(qq/$_="%s"/, $attr->{$_}) : ()
-    } qw(id class);
-    push @g_attr, $attr->{g_extra} if $attr->{g_extra};
-    if ($attr->{href}) {
-        my @a_attr;
-        push @a_attr, sprintf qq/xlink:href="%s"/, $attr->{href} if $attr->{href};
-        # default target=_top else links will open within SVG <object>
-        push @a_attr, sprintf qq/target="%s"/, $attr->{target} || "_top";
-        push @a_attr, $attr->{a_extra} if $attr->{a_extra};
-        $self->{svg} .= sprintf qq/<a %s>\n/, join(' ', (@a_attr, @g_attr));
-    }
-    else {
-        $self->{svg} .= sprintf qq/<g %s>\n/, join(' ', @g_attr);
-    }
-
-    $self->{svg} .= sprintf qq/<title>%s<\/title>/, $attr->{title}
-        if $attr->{title}; # should be first element within g container
-}
-
-sub group_end {
-    my ($self, $attr) = @_;
-    $self->{svg} .= $attr->{href} ? qq/<\/a>\n/ : qq/<\/g>\n/;
-}
-
-sub filledRectangle {
-    my ($self, $x1, $y1, $x2, $y2, $fill, $extra) = @_;
-    $x1 = sprintf "%0.1f", $x1;
-    $x2 = sprintf "%0.1f", $x2;
-    my $w = sprintf "%0.1f", $x2 - $x1;
-    my $h = sprintf "%0.1f", $y2 - $y1;
-    $extra = defined $extra ? $extra : "";
-    $self->{svg} .= qq/<rect x="$x1" y="$y1" width="$w" height="$h" fill="$fill" $extra \/>\n/;
-}
-
-sub stringTTF {
-    my ($self, $id, $x, $y, $str, $extra) = @_;
-    $x = sprintf "%0.2f", $x;
-    $id = defined $id ? qq/id="$id"/ : "";
-    $extra ||= "";
-    $self->{svg} .= qq/<text $id x="$x" y="$y" $extra>$str<\/text>\n/;
-}
-
-sub svg {
-    my $self = shift;
-    return "$self->{svg}</svg>\n";
-}
-1;
-}
-
-sub namehash {
-    # Generate a vector hash for the name string, weighting early over
-    # later characters. We want to pick the same colors for function
-    # names across different flame graphs.
-    my $name = shift;
-    my $vector = 0;
-    my $weight = 1;
-    my $max = 1;
-    my $mod = 10;
-    # if module name present, trunc to 1st char
-    $name =~ s/.(.*?)`//;
-    foreach my $c (split //, $name) {
-        my $i = (ord $c) % $mod;
-        $vector += ($i / ($mod++ - 1)) * $weight;
-        $max += 1 * $weight;
-        $weight *= 0.70;
-        last if $mod > 12;
-    }
-    return (1 - $vector / $max)
-}
-
-sub color {
-    my ($type, $hash, $name) = @_;
-    my ($v1, $v2, $v3);
-
-    if ($hash) {
-        $v1 = namehash($name);
-        $v2 = $v3 = namehash(scalar reverse $name);
-    }
-    else {
-        $v1 = rand(1);
-        $v2 = rand(1);
-        $v3 = rand(1);
-    }
-
-    # theme palettes
-    if (defined $type and $type eq "hot") {
-        my $r = 205 + int(50 * $v3);
-        my $g = 0 + int(230 * $v1);
-        my $b = 0 + int(55 * $v2);
-        return "rgb($r,$g,$b)";
-    }
-    if (defined $type and $type eq "mem") {
-        my $r = 0;
-        my $g = 190 + int(50 * $v2);
-        my $b = 0 + int(210 * $v1);
-        return "rgb($r,$g,$b)";
-    }
-    if (defined $type and $type eq "io") {
-        my $r = 80 + int(60 * $v1);
-        my $g = $r;
-        my $b = 190 + int(55 * $v2);
-        return "rgb($r,$g,$b)";
-    }
-
-    # multi palettes
-    if (defined $type and $type eq "java") {
-        # Handle both annotations (_[j], _[i], ...; which are
-        # accurate), as well as input that lacks any annotations, as
-        # best as possible. Without annotations, we get a little hacky
-        # and match on java|org|com, etc.
-        if ($name =~ m:_\[j\]$:) { # jit annotation
-            $type = "green";
-        }
-        elsif ($name =~ m:_\[i\]$:) { # inline annotation
-            $type = "aqua";
-        }
-        elsif ($name =~ m:^L?(java|javax|jdk|net|org|com|io|sun)/:) { # Java
-            $type = "green";
-        }
-        elsif ($name =~ m:_\[k\]$:) { # kernel annotation
-            $type = "orange";
-        }
-        elsif ($name =~ /::/) { # C++
-            $type = "yellow";
-        }
-        else { # system
-            $type = "red";
-        }
-        # fall-through to color palettes
-    }
-    if (defined $type and $type eq "perl") {
-        if ($name =~ /::/) { # C++
-            $type = "yellow";
-        }
-        elsif ($name =~ m:Perl: or $name =~ m:\.pl:) { # Perl
-            $type = "green";
-        }
-        elsif ($name =~ m:_\[k\]$:) { # kernel
-            $type = "orange";
-        }
-        else { # system
-            $type = "red";
-        }
-        # fall-through to color palettes
-    }
-    if (defined $type and $type eq "js") {
-        # Handle both annotations (_[j], _[i], ...; which are
-        # accurate), as well as input that lacks any annotations, as
-        # best as possible. Without annotations, we get a little hacky,
-        # and match on a "/" with a ".js", etc.
-        if ($name =~ m:_\[j\]$:) { # jit annotation
-            if ($name =~ m:/:) {
-                $type = "green"; # source
-            }
-            else {
-                $type = "aqua"; # builtin
-            }
-        }
-        elsif ($name =~ /::/) { # C++
-            $type = "yellow";
-        }
-        elsif ($name =~ m:/.*\.js:) { # JavaScript (match "/" in path)
-            $type = "green";
-        }
-        elsif ($name =~ m/:/) { # JavaScript (match ":" in builtin)
-            $type = "aqua";
-        }
-        elsif ($name =~ m/^ $/) { # Missing symbol
-            $type = "green";
-        }
-        elsif ($name =~ m:_\[k\]:) { # kernel
-            $type = "orange";
-        }
-        else { # system
-            $type = "red";
-        }
-        # fall-through to color palettes
-    }
-    if (defined $type and $type eq "wakeup") {
-        $type = "aqua";
-        # fall-through to color palettes
-    }
-    if (defined $type and $type eq "chain") {
-        if ($name =~ m:_\[w\]:) { # waker
-            $type = "aqua"
-        }
-        else { # off-CPU
-            $type = "blue";
-        }
-        # fall-through to color palettes
-    }
-
-    # color palettes
-    if (defined $type and $type eq "red") {
-        my $r = 200 + int(55 * $v1);
-        my $x = 50 + int(80 * $v1);
-        return "rgb($r,$x,$x)";
-    }
-    if (defined $type and $type eq "green") {
-        my $g = 200 + int(55 * $v1);
-        my $x = 50 + int(60 * $v1);
-        return "rgb($x,$g,$x)";
-    }
-    if (defined $type and $type eq "blue") {
-        my $b = 205 + int(50 * $v1);
-        my $x = 80 + int(60 * $v1);
-        return "rgb($x,$x,$b)";
-    }
-    if (defined $type and $type eq "yellow") {
-        my $x = 175 + int(55 * $v1);
-        my $b = 50 + int(20 * $v1);
-        return "rgb($x,$x,$b)";
-    }
-    if (defined $type and $type eq "purple") {
-        my $x = 190 + int(65 * $v1);
-        my $g = 80 + int(60 * $v1);
-        return "rgb($x,$g,$x)";
-    }
-    if (defined $type and $type eq "aqua") {
-        my $r = 50 + int(60 * $v1);
-        my $g = 165 + int(55 * $v1);
-        my $b = 165 + int(55 * $v1);
-        return "rgb($r,$g,$b)";
-    }
-    if (defined $type and $type eq "orange") {
-        my $r = 190 + int(65 * $v1);
-        my $g = 90 + int(65 * $v1);
-        return "rgb($r,$g,0)";
-    }
-
-    return "rgb(0,0,0)";
-}
-
-sub color_scale {
-    my ($value, $max) = @_;
-    my ($r, $g, $b) = (255, 255, 255);
-    $value = -$value if $negate;
-    if ($value > 0) {
-        $g = $b = int(210 * ($max - $value) / $max);
-    }
-    elsif ($value < 0) {
-        $r = $g = int(210 * ($max + $value) / $max);
-    }
-    return "rgb($r,$g,$b)";
-}
-
-sub color_map {
-    my ($colors, $func) = @_;
-    if (exists $palette_map{$func}) {
-        return $palette_map{$func};
-    }
-    else {
-        $palette_map{$func} = color($colors, $hash, $func);
-        return $palette_map{$func};
-    }
-}
-
-sub write_palette {
-    open(FILE, ">$pal_file");
-    foreach my $key (sort keys %palette_map) {
-        print FILE $key . "->" . $palette_map{$key} . "\n";
-    }
-    close(FILE);
-}
-
-sub read_palette {
-    if (-e $pal_file) {
-        open(FILE, $pal_file) or die "can't open file $pal_file: $!";
-        while (my $line = <FILE>) {
-            chomp($line);
-            (my $key, my $value) = split("->", $line);
-            $palette_map{$key} = $value;
-        }
-        close(FILE)
-    }
-}
-
-my %Node; # Hash of merged frame data
-my %Tmp;
-
-# flow() merges two stacks, storing the merged frames and value data in %Node.
-sub flow {
-    my ($last, $this, $v, $d) = @_;
-
-    my $len_a = @$last - 1;
-    my $len_b = @$this - 1;
-
-    my $i = 0;
-    my $len_same;
-    for (; $i <= $len_a; $i++) {
-        last if $i > $len_b;
-        last if $last->[$i] ne $this->[$i];
-    }
-    $len_same = $i;
-
-    for ($i = $len_a; $i >= $len_same; $i--) {
-        my $k = "$last->[$i];$i";
-        # a unique ID is constructed from "func;depth;etime";
-        # func-depth isn't unique, it may be repeated later.
-        $Node{"$k;$v"}->{stime} = delete $Tmp{$k}->{stime};
-        if (defined $Tmp{$k}->{delta}) {
-            $Node{"$k;$v"}->{delta} = delete $Tmp{$k}->{delta};
-        }
-        delete $Tmp{$k};
-    }
-
-    for ($i = $len_same; $i <= $len_b; $i++) {
-        my $k = "$this->[$i];$i";
-        $Tmp{$k}->{stime} = $v;
-        if (defined $d) {
-            $Tmp{$k}->{delta} += $i == $len_b ? $d : 0;
-        }
-    }
-
-    return $this;
-}
-
-# parse input
-my @Data;
-my @SortedData;
-my $last = [];
-my $time = 0;
-my $delta = undef;
-my $ignored = 0;
-my $line;
-my $maxdelta = 1;
-
-# reverse if needed
-foreach (<>) {
-    chomp;
-    $line = $_;
-    if ($stackreverse) {
-        # there may be an extra samples column for differentials
-        # XXX todo: redo these REs as one. It's repeated below.
-        my ($stack, $samples) = (/^(.*)\s+?(\d+(?:\.\d*)?)$/);
-        my $samples2 = undef;
-        if ($stack =~ /^(.*)\s+?(\d+(?:\.\d*)?)$/) {
-            $samples2 = $samples;
-            ($stack, $samples) = $stack =~ (/^(.*)\s+?(\d+(?:\.\d*)?)$/);
-            unshift @Data, join(";", reverse split(";", $stack)) . " $samples $samples2";
-        }
-        else {
-            unshift @Data, join(";", reverse split(";", $stack)) . " $samples";
-        }
-    }
-    else {
-        unshift @Data, $line;
-    }
-}
-
-if ($flamechart) {
-    # In flame chart mode, just reverse the data so time moves from left to right.
-    @SortedData = reverse @Data;
-}
-else {
-    @SortedData = sort @Data;
-}
-
-# process and merge frames
-foreach (@SortedData) {
-    chomp;
-    # process: folded_stack count
-    # eg: func_a;func_b;func_c 31
-    my ($stack, $samples) = (/^(.*)\s+?(\d+(?:\.\d*)?)$/);
-    unless (defined $samples and defined $stack) {
-        ++$ignored;
-        next;
-    }
-
-    # there may be an extra samples column for differentials:
-    my $samples2 = undef;
-    if ($stack =~ /^(.*)\s+?(\d+(?:\.\d*)?)$/) {
-        $samples2 = $samples;
-        ($stack, $samples) = $stack =~ (/^(.*)\s+?(\d+(?:\.\d*)?)$/);
-    }
-    $delta = undef;
-    if (defined $samples2) {
-        $delta = $samples2 - $samples;
-        $maxdelta = abs($delta) if abs($delta) > $maxdelta;
-    }
-
-    # for chain graphs, annotate waker frames with "_[w]", for later
-    # coloring. This is a hack, but has a precedent ("_[k]" from perf).
-    if ($colors eq "chain") {
-        my @parts = split ";--;", $stack;
-        my @newparts = ();
-        $stack = shift @parts;
-        $stack .= ";--;";
-        foreach my $part (@parts) {
-            $part =~ s/;/_[w];/g;
-            $part .= "_[w]";
-            push @newparts, $part;
-        }
-        $stack .= join ";--;", @parts;
-    }
-
-    # merge frames and populate %Node:
-    $last = flow($last, [ '', split ";", $stack ], $time, $delta);
-
-    if (defined $samples2) {
-        $time += $samples2;
-    }
-    else {
-        $time += $samples;
-    }
-}
-flow($last, [], $time, $delta);
-
-warn "Ignored $ignored lines with invalid format\n" if $ignored;
-unless ($time) {
-    warn "ERROR: No stack counts found\n";
-    my $im = SVG->new();
-    # emit an error message SVG, for tools automating flamegraph use
-    my $imageheight = $fontsize * 5;
-    $im->header($imagewidth, $imageheight);
-    $im->stringTTF(undef, int($imagewidth / 2), $fontsize * 2,
-        "ERROR: No valid input provided to flamegraph.pl.");
-    print $im->svg;
-    exit 2;
-}
-if ($timemax and $timemax < $time) {
-    warn "Specified --total $timemax is less than actual total $time, so ignored\n"
-        if $timemax / $time > 0.02; # only warn is significant (e.g., not rounding etc)
-    undef $timemax;
-}
-$timemax ||= $time;
-
-my $widthpertime = ($imagewidth - 2 * $xpad) / $timemax;
-my $minwidth_time = $minwidth / $widthpertime;
-
-# prune blocks that are too narrow and determine max depth
-while (my ($id, $node) = each %Node) {
-    my ($func, $depth, $etime) = split ";", $id;
-    my $stime = $node->{stime};
-    die "missing start for $id" if not defined $stime;
-
-    if (($etime - $stime) < $minwidth_time) {
-        delete $Node{$id};
-        next;
-    }
-    $depthmax = $depth if $depth > $depthmax;
-}
-
-# draw canvas, and embed interactive JavaScript program
-my $imageheight = (($depthmax + 1) * $frameheight) + $ypad1 + $ypad2;
-$imageheight += $ypad3 if $subtitletext ne "";
-my $titlesize = $fontsize + 5;
-my $im = SVG->new();
-my ($black, $vdgrey, $dgrey) = (
-    $im->colorAllocate(0, 0, 0),
-    $im->colorAllocate(160, 160, 160),
-    $im->colorAllocate(200, 200, 200),
-);
-$im->header($imagewidth, $imageheight);
-my $inc = <<INC;
-<defs>
-	<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
-		<stop stop-color="$bgcolor1" offset="5%" />
-		<stop stop-color="$bgcolor2" offset="95%" />
-	</linearGradient>
-</defs>
-<style type="text/css">
-	text { font-family:$fonttype; font-size:${fontsize}px; fill:$black; }
-	#search, #ignorecase { opacity:0.1; cursor:pointer; }
-	#search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; }
-	#subtitle { text-anchor:middle; font-color:$vdgrey; }
-	#title { text-anchor:middle; font-size:${titlesize}px}
-	#unzoom { cursor:pointer; }
-	#frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
-	.hide { display:none; }
-	.parent { opacity:0.5; }
-</style>
-<script type="text/ecmascript">
-<![CDATA[
-	"use strict";
-	var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn;
-	function init(evt) {
-		details = document.getElementById("details").firstChild;
-		searchbtn = document.getElementById("search");
-		ignorecaseBtn = document.getElementById("ignorecase");
-		unzoombtn = document.getElementById("unzoom");
-		matchedtxt = document.getElementById("matched");
-		svg = document.getElementsByTagName("svg")[0];
-		searching = 0;
-		currentSearchTerm = null;
-	}
-
-	window.addEventListener("click", function(e) {
-		var target = find_group(e.target);
-		if (target) {
-			if (target.nodeName == "a") {
-				if (e.ctrlKey === false) return;
-				e.preventDefault();
-			}
-			if (target.classList.contains("parent")) unzoom();
-			zoom(target);
-		}
-		else if (e.target.id == "unzoom") unzoom();
-		else if (e.target.id == "search") search_prompt();
-		else if (e.target.id == "ignorecase") toggle_ignorecase();
-	}, false)
-
-	// mouse-over for info
-	// show
-	window.addEventListener("mouseover", function(e) {
-		var target = find_group(e.target);
-		if (target) details.nodeValue = "$nametype " + g_to_text(target);
-	}, false)
-
-	// clear
-	window.addEventListener("mouseout", function(e) {
-		var target = find_group(e.target);
-		if (target) details.nodeValue = ' ';
-	}, false)
-
-	// ctrl-F for search
-	window.addEventListener("keydown",function (e) {
-		if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
-			e.preventDefault();
-			search_prompt();
-		}
-	}, false)
-
-	// ctrl-I to toggle case-sensitive search
-	window.addEventListener("keydown",function (e) {
-		if (e.ctrlKey && e.keyCode === 73) {
-			e.preventDefault();
-			toggle_ignorecase();
-		}
-	}, false)
-
-	// functions
-	function find_child(node, selector) {
-		var children = node.querySelectorAll(selector);
-		if (children.length) return children[0];
-		return;
-	}
-	function find_group(node) {
-		var parent = node.parentElement;
-		if (!parent) return;
-		if (parent.id == "frames") return node;
-		return find_group(parent);
-	}
-	function orig_save(e, attr, val) {
-		if (e.attributes["_orig_" + attr] != undefined) return;
-		if (e.attributes[attr] == undefined) return;
-		if (val == undefined) val = e.attributes[attr].value;
-		e.setAttribute("_orig_" + attr, val);
-	}
-	function orig_load(e, attr) {
-		if (e.attributes["_orig_"+attr] == undefined) return;
-		e.attributes[attr].value = e.attributes["_orig_" + attr].value;
-		e.removeAttribute("_orig_"+attr);
-	}
-	function g_to_text(e) {
-		var text = find_child(e, "title").firstChild.nodeValue;
-		return (text)
-	}
-	function g_to_func(e) {
-		var func = g_to_text(e);
-		// if there's any manipulation we want to do to the function
-		// name before it's searched, do it here before returning.
-		return (func);
-	}
-	function update_text(e) {
-		var r = find_child(e, "rect");
-		var t = find_child(e, "text");
-		var w = parseFloat(r.attributes.width.value) -3;
-		var txt = find_child(e, "title").textContent.replace(/\\([^(]*\\)\$/,"");
-		t.attributes.x.value = parseFloat(r.attributes.x.value) + 3;
-
-		// Smaller than this size won't fit anything
-		if (w < 2 * $fontsize * $fontwidth) {
-			t.textContent = "";
-			return;
-		}
-
-		t.textContent = txt;
-		// Fit in full text width
-		if (/^ *\$/.test(txt) || t.getSubStringLength(0, txt.length) < w)
-			return;
-
-		for (var x = txt.length - 2; x > 0; x--) {
-			if (t.getSubStringLength(0, x + 2) <= w) {
-				t.textContent = txt.substring(0, x) + "..";
-				return;
-			}
-		}
-		t.textContent = "";
-	}
-
-	// zoom
-	function zoom_reset(e) {
-		if (e.attributes != undefined) {
-			orig_load(e, "x");
-			orig_load(e, "width");
-		}
-		if (e.childNodes == undefined) return;
-		for (var i = 0, c = e.childNodes; i < c.length; i++) {
-			zoom_reset(c[i]);
-		}
-	}
-	function zoom_child(e, x, ratio) {
-		if (e.attributes != undefined) {
-			if (e.attributes.x != undefined) {
-				orig_save(e, "x");
-				e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - $xpad) * ratio + $xpad;
-				if (e.tagName == "text")
-					e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3;
-			}
-			if (e.attributes.width != undefined) {
-				orig_save(e, "width");
-				e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio;
-			}
-		}
-
-		if (e.childNodes == undefined) return;
-		for (var i = 0, c = e.childNodes; i < c.length; i++) {
-			zoom_child(c[i], x - $xpad, ratio);
-		}
-	}
-	function zoom_parent(e) {
-		if (e.attributes) {
-			if (e.attributes.x != undefined) {
-				orig_save(e, "x");
-				e.attributes.x.value = $xpad;
-			}
-			if (e.attributes.width != undefined) {
-				orig_save(e, "width");
-				e.attributes.width.value = parseInt(svg.width.baseVal.value) - ($xpad * 2);
-			}
-		}
-		if (e.childNodes == undefined) return;
-		for (var i = 0, c = e.childNodes; i < c.length; i++) {
-			zoom_parent(c[i]);
-		}
-	}
-	function zoom(node) {
-		var attr = find_child(node, "rect").attributes;
-		var width = parseFloat(attr.width.value);
-		var xmin = parseFloat(attr.x.value);
-		var xmax = parseFloat(xmin + width);
-		var ymin = parseFloat(attr.y.value);
-		var ratio = (svg.width.baseVal.value - 2 * $xpad) / width;
-
-		// XXX: Workaround for JavaScript float issues (fix me)
-		var fudge = 0.0001;
-
-		unzoombtn.classList.remove("hide");
-
-		var el = document.getElementById("frames").children;
-		for (var i = 0; i < el.length; i++) {
-			var e = el[i];
-			var a = find_child(e, "rect").attributes;
-			var ex = parseFloat(a.x.value);
-			var ew = parseFloat(a.width.value);
-			var upstack;
-			// Is it an ancestor
-			if ($inverted == 0) {
-				upstack = parseFloat(a.y.value) > ymin;
-			} else {
-				upstack = parseFloat(a.y.value) < ymin;
-			}
-			if (upstack) {
-				// Direct ancestor
-				if (ex <= xmin && (ex+ew+fudge) >= xmax) {
-					e.classList.add("parent");
-					zoom_parent(e);
-					update_text(e);
-				}
-				// not in current path
-				else
-					e.classList.add("hide");
-			}
-			// Children maybe
-			else {
-				// no common path
-				if (ex < xmin || ex + fudge >= xmax) {
-					e.classList.add("hide");
-				}
-				else {
-					zoom_child(e, xmin, ratio);
-					update_text(e);
-				}
-			}
-		}
-		search();
-	}
-	function unzoom() {
-		unzoombtn.classList.add("hide");
-		var el = document.getElementById("frames").children;
-		for(var i = 0; i < el.length; i++) {
-			el[i].classList.remove("parent");
-			el[i].classList.remove("hide");
-			zoom_reset(el[i]);
-			update_text(el[i]);
-		}
-		search();
-	}
-
-	// search
-	function toggle_ignorecase() {
-		ignorecase = !ignorecase;
-		if (ignorecase) {
-			ignorecaseBtn.classList.add("show");
-		} else {
-			ignorecaseBtn.classList.remove("show");
-		}
-		reset_search();
-		search();
-	}
-	function reset_search() {
-		var el = document.querySelectorAll("#frames rect");
-		for (var i = 0; i < el.length; i++) {
-			orig_load(el[i], "fill")
-		}
-	}
-	function search_prompt() {
-		if (!searching) {
-			var term = prompt("Enter a search term (regexp " +
-			    "allowed, eg: ^ext4_)"
-			    + (ignorecase ? ", ignoring case" : "")
-			    + "\\nPress Ctrl-i to toggle case sensitivity", "");
-			if (term != null) {
-				currentSearchTerm = term;
-				search();
-			}
-		} else {
-			reset_search();
-			searching = 0;
-			currentSearchTerm = null;
-			searchbtn.classList.remove("show");
-			searchbtn.firstChild.nodeValue = "Search"
-			matchedtxt.classList.add("hide");
-			matchedtxt.firstChild.nodeValue = ""
-		}
-	}
-	function search(term) {
-		if (currentSearchTerm === null) return;
-		var term = currentSearchTerm;
-
-		var re = new RegExp(term, ignorecase ? 'i' : '');
-		var el = document.getElementById("frames").children;
-		var matches = new Object();
-		var maxwidth = 0;
-		for (var i = 0; i < el.length; i++) {
-			var e = el[i];
-			var func = g_to_func(e);
-			var rect = find_child(e, "rect");
-			if (func == null || rect == null)
-				continue;
-
-			// Save max width. Only works as we have a root frame
-			var w = parseFloat(rect.attributes.width.value);
-			if (w > maxwidth)
-				maxwidth = w;
-
-			if (func.match(re)) {
-				// highlight
-				var x = parseFloat(rect.attributes.x.value);
-				orig_save(rect, "fill");
-				rect.attributes.fill.value = "$searchcolor";
-
-				// remember matches
-				if (matches[x] == undefined) {
-					matches[x] = w;
-				} else {
-					if (w > matches[x]) {
-						// overwrite with parent
-						matches[x] = w;
-					}
-				}
-				searching = 1;
-			}
-		}
-		if (!searching)
-			return;
-
-		searchbtn.classList.add("show");
-		searchbtn.firstChild.nodeValue = "Reset Search";
-
-		// calculate percent matched, excluding vertical overlap
-		var count = 0;
-		var lastx = -1;
-		var lastw = 0;
-		var keys = Array();
-		for (k in matches) {
-			if (matches.hasOwnProperty(k))
-				keys.push(k);
-		}
-		// sort the matched frames by their x location
-		// ascending, then width descending
-		keys.sort(function(a, b){
-			return a - b;
-		});
-		// Step through frames saving only the biggest bottom-up frames
-		// thanks to the sort order. This relies on the tree property
-		// where children are always smaller than their parents.
-		var fudge = 0.0001;	// JavaScript floating point
-		for (var k in keys) {
-			var x = parseFloat(keys[k]);
-			var w = matches[keys[k]];
-			if (x >= lastx + lastw - fudge) {
-				count += w;
-				lastx = x;
-				lastw = w;
-			}
-		}
-		// display matched percent
-		matchedtxt.classList.remove("hide");
-		var pct = 100 * count / maxwidth;
-		if (pct != 100) pct = pct.toFixed(1)
-		matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
-	}
-]]>
-</script>
-INC
-$im->include($inc);
-$im->filledRectangle(0, 0, $imagewidth, $imageheight, 'url(#background)');
-$im->stringTTF("title", int($imagewidth / 2), $fontsize * 2, $titletext);
-$im->stringTTF("subtitle", int($imagewidth / 2), $fontsize * 4, $subtitletext) if $subtitletext ne "";
-$im->stringTTF("details", $xpad, $imageheight - ($ypad2 / 2), " ");
-$im->stringTTF("unzoom", $xpad, $fontsize * 2, "Reset Zoom", 'class="hide"');
-$im->stringTTF("search", $imagewidth - $xpad - 100, $fontsize * 2, "Search");
-$im->stringTTF("ignorecase", $imagewidth - $xpad - 16, $fontsize * 2, "ic");
-$im->stringTTF("matched", $imagewidth - $xpad - 100, $imageheight - ($ypad2 / 2), " ");
-
-if ($palette) {
-    read_palette();
-}
-
-# draw frames
-$im->group_start({ id => "frames" });
-while (my ($id, $node) = each %Node) {
-    my ($func, $depth, $etime) = split ";", $id;
-    my $stime = $node->{stime};
-    my $delta = $node->{delta};
-
-    $etime = $timemax if $func eq "" and $depth == 0;
-
-    my $x1 = $xpad + $stime * $widthpertime;
-    my $x2 = $xpad + $etime * $widthpertime;
-    my ($y1, $y2);
-    unless ($inverted) {
-        $y1 = $imageheight - $ypad2 - ($depth + 1) * $frameheight + $framepad;
-        $y2 = $imageheight - $ypad2 - $depth * $frameheight;
-    }
-    else {
-        $y1 = $ypad1 + $depth * $frameheight;
-        $y2 = $ypad1 + ($depth + 1) * $frameheight - $framepad;
-    }
-
-    my $samples = sprintf "%.0f", ($etime - $stime) * $factor;
-    (my $samples_txt = $samples) # add commas per perlfaq5
-        =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g;
-
-    my $info;
-    if ($func eq "" and $depth == 0) {
-        $info = "all ($samples_txt $countname, 100%)";
-    }
-    else {
-        my $pct = sprintf "%.2f", ((100 * $samples) / ($timemax * $factor));
-        my $escaped_func = $func;
-        # clean up SVG breaking characters:
-        $escaped_func =~ s/&/&amp;/g;
-        $escaped_func =~ s/</&lt;/g;
-        $escaped_func =~ s/>/&gt;/g;
-        $escaped_func =~ s/"/&quot;/g;
-        $escaped_func =~ s/_\[[kwij]\]$//; # strip any annotation
-        unless (defined $delta) {
-            $info = "$escaped_func ($samples_txt $countname, $pct%)";
-        }
-        else {
-            my $d = $negate ? -$delta : $delta;
-            my $deltapct = sprintf "%.2f", ((100 * $d) / ($timemax * $factor));
-            $deltapct = $d > 0 ? "+$deltapct" : $deltapct;
-            $info = "$escaped_func ($samples_txt $countname, $pct%; $deltapct%)";
-        }
-    }
-
-    my $nameattr = { %{$nameattr{$func} || {}} }; # shallow clone
-    $nameattr->{title} ||= $info;
-    $im->group_start($nameattr);
-
-    my $color;
-    if ($func eq "--") {
-        $color = $vdgrey;
-    }
-    elsif ($func eq "-") {
-        $color = $dgrey;
-    }
-    elsif (defined $delta) {
-        $color = color_scale($delta, $maxdelta);
-    }
-    elsif ($palette) {
-        $color = color_map($colors, $func);
-    }
-    else {
-        $color = color($colors, $hash, $func);
-    }
-    $im->filledRectangle($x1, $y1, $x2, $y2, $color, 'rx="2" ry="2"');
-
-    my $chars = int(($x2 - $x1) / ($fontsize * $fontwidth));
-    my $text = "";
-    if ($chars >= 3) {
-        # room for one char plus two dots
-        $func =~ s/_\[[kwij]\]$//; # strip any annotation
-        $text = substr $func, 0, $chars;
-        substr($text, -2, 2) = ".." if $chars < length $func;
-        $text =~ s/&/&amp;/g;
-        $text =~ s/</&lt;/g;
-        $text =~ s/>/&gt;/g;
-    }
-    $im->stringTTF(undef, $x1 + 3, 3 + ($y1 + $y2) / 2, $text);
-
-    $im->group_end($nameattr);
-}
-$im->group_end();
-
-print $im->svg;
-
-if ($palette) {
-    write_palette();
-}
-
-# vim: ts=8 sts=8 sw=8 noexpandtab
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/jmaps b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/jmaps
deleted file mode 100644
index b9b0d1180..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/jmaps
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-#
-# jmaps - creates java /tmp/perf-PID.map symbol maps for all java processes.
-#
-# This is a helper script that finds all running "java" processes, then executes
-# perf-map-agent on them all, creating symbol map files in /tmp. These map files
-# are read by perf_events (aka "perf") when doing system profiles (specifically,
-# the "report" and "script" subcommands).
-#
-# USAGE: jmaps [-u]
-#		-u	# unfoldall: include inlined symbols
-#
-# My typical workflow is this:
-#
-# perf record -F 99 -a -g -- sleep 30; jmaps
-# perf script > out.stacks
-# ./stackcollapse-perf.pl out.stacks | ./flamegraph.pl --color=java --hash > out.stacks.svg
-#
-# The stackcollapse-perf.pl and flamegraph.pl programs come from:
-# https://github.com/brendangregg/FlameGraph
-#
-# REQUIREMENTS:
-# Tune two environment settings below.
-#
-# 13-Feb-2015	Brendan Gregg	Created this.
-# 20-Feb-2017      "      "     Added -u for unfoldall.
-
-JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-8-oracle}
-AGENT_HOME=${AGENT_HOME:-/usr/lib/jvm/perf-map-agent}  # from https://github.com/jvm-profiling-tools/perf-map-agent
-debug=0
-
-if [[ "$USER" != root ]]; then
-	echo "ERROR: not root user? exiting..."
-	exit
-fi
-
-if [[ ! -x $JAVA_HOME ]]; then
-	echo "ERROR: JAVA_HOME not set correctly; edit $0 and fix"
-	exit
-fi
-
-if [[ ! -x $AGENT_HOME ]]; then
-	echo "ERROR: AGENT_HOME not set correctly; edit $0 and fix"
-	exit
-fi
-
-if [[ "$1" == "-u" ]]; then
-	opts=unfoldall
-fi
-
-# figure out where the agent files are:
-AGENT_OUT=""
-AGENT_JAR=""
-if [[ -e $AGENT_HOME/out/attach-main.jar ]]; then
-	AGENT_JAR=$AGENT_HOME/out/attach-main.jar
-elif [[ -e $AGENT_HOME/attach-main.jar ]]; then
-	AGENT_JAR=$AGENT_HOME/attach-main.jar
-fi
-if [[ -e $AGENT_HOME/out/libperfmap.so ]]; then
-	AGENT_OUT=$AGENT_HOME/out
-elif [[ -e $AGENT_HOME/libperfmap.so ]]; then
-	AGENT_OUT=$AGENT_HOME
-fi
-if [[ "$AGENT_OUT" == "" || "$AGENT_JAR" == "" ]]; then
-	echo "ERROR: Missing perf-map-agent files in $AGENT_HOME. Check installation."
-	exit
-fi
-
-# Fetch map for all "java" processes
-echo "Fetching maps for all java processes..."
-for pid in $(pgrep -x java); do
-	mapfile=/tmp/perf-$pid.map
-	[[ -e $mapfile ]] && rm $mapfile
-
-	cmd="cd $AGENT_OUT; $JAVA_HOME/bin/java -Xms32m -Xmx128m -cp $AGENT_JAR:$JAVA_HOME/lib/tools.jar net.virtualvoid.perf.AttachOnce $pid $opts"
-	(( debug )) && echo $cmd
-
-	user=$(ps ho user -p $pid)
-	group=$(ps ho group -p $pid)
-	if [[ "$user" != root ]]; then
-		if [[ "$user" == [0-9]* ]]; then
-			# UID only, likely GID too, run sudo with #UID:
-			cmd="sudo -u '#'$user -g '#'$group sh -c '$cmd'"
-		else
-			cmd="sudo -u $user -g $group sh -c '$cmd'"
-		fi
-	fi
-
-	echo "Mapping PID $pid (user $user):"
-	if (( debug )); then
-		time eval $cmd
-	else
-		eval $cmd
-	fi
-	if [[ -e "$mapfile" ]]; then
-		chown root $mapfile
-		chmod 666 $mapfile
-	else
-		echo "ERROR: $mapfile not created."
-	fi
-
-	echo "wc(1): $(wc $mapfile)"
-	echo
-done
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/pkgsplit-perf.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/pkgsplit-perf.pl
deleted file mode 100644
index 5018e06da..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/pkgsplit-perf.pl
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/perl -w
-#
-# pkgsplit-perf.pl	Split IP samples on package names "/", eg, Java.
-#
-# This is for the creation of Java package flame graphs. Example steps:
-#
-# perf record -F 199 -a -- sleep 30; ./jmaps
-# perf script | ./pkgsplit-perf.pl | ./flamegraph.pl > out.svg
-#
-# Note that stack traces are not sampled (no -g), as we split Java package
-# names into frames rather than stack frames.
-#
-# (jmaps is a helper script for automating perf-map-agent: Java symbol dumps.)
-#
-# The default output of "perf script" varies between kernel versions, so we'll
-# need to deal with that here. I could make people use the perf script option
-# to pick fields, so our input is static, but A) I prefer the simplicity of
-# just saying: run "perf script", and B) the option to choose fields itself
-# changed between kernel versions! -f became -F.
-#
-# Copyright 2017 Netflix, Inc.
-# Licensed under the Apache License, Version 2.0 (the "License")
-#
-# 20-Sep-2016	Brendan Gregg	Created this.
-
-use strict;
-
-my $include_pname = 1; # include process names in stacks
-my $include_pid = 0;   # include process ID with process name
-my $include_tid = 0;   # include process & thread ID with process name
-
-while (<>) {
-    # filter comments
-    next if /^#/;
-
-    # filter idle events
-    next if /xen_hypercall_sched_op|cpu_idle|native_safe_halt/;
-
-    my ($pid, $tid, $pname);
-
-    # Linux 3.13:
-    #     java 13905 [000]  8048.096572: cpu-clock:      7fd781ac3053 Ljava/util/Arrays$ArrayList;::toArray (/tmp/perf-12149.map)
-    #     java  8301 [050] 13527.392454: cycles:      7fa8a80d9bff Dictionary::find(int, unsigned int, Symbol*, ClassLoaderData*, Handle, Thread*) (/usr/lib/jvm/java-8-oracle-1.8.0.121/jre/lib/amd64/server/libjvm.so)
-    #     java  4567/8603  [023] 13527.389886: cycles:      7fa863349895 Lcom/google/gson/JsonObject;::add (/tmp/perf-4567.map)
-    #
-    # Linux 4.8:
-    #     java 30894 [007] 452884.077440:   10101010 cpu-clock:      7f0acc8eff67 Lsun/nio/ch/SocketChannelImpl;::read+0x27 (/tmp/perf-30849.map)
-    #     bash 26858/26858 [006] 5440237.995639: cpu-clock:            433573 [unknown] (/bin/bash)
-    #
-    if (/^\s+(\S.+?)\s+(\d+)\/*(\d+)*\s.*?:.*:/) {
-        # parse process name and pid/tid
-        if ($3) {
-            ($pid, $tid) = ($2, $3);
-        }
-        else {
-            ($pid, $tid) = ("?", $2);
-        }
-
-        if ($include_tid) {
-            $pname = "$1-$pid/$tid";
-        }
-        elsif ($include_pid) {
-            $pname = "$1-$pid";
-        }
-        else {
-            $pname = $1;
-        }
-        $pname =~ tr/ /_/;
-    }
-    else {
-        # not a match
-        next;
-    }
-
-    # parse rest of line
-    s/^.*?:.*?:\s+//;
-    s/ \(.*?\)$//;
-    chomp;
-    my ($addr, $func) = split(' ', $_, 2);
-
-    # strip Java's leading "L"
-    $func =~ s/^L//;
-
-    # replace numbers with X
-    $func =~ s/[0-9]/X/g;
-
-    # colon delimitered
-    $func =~ s:/:;:g;
-    print "$pname;$func 1\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/range-perf.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/range-perf.pl
deleted file mode 100644
index 4ee49c282..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/range-perf.pl
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/perl -w
-#
-# range-perf	Extract a time range from Linux "perf script" output.
-#
-# USAGE EXAMPLE:
-#
-# perf record -F 100 -a -- sleep 60
-# perf script | ./perf2range.pl 10 20	# range 10 to 20 seconds only
-# perf script | ./perf2range.pl 0 0.5	# first half second only
-#
-# MAKING A SERIES OF FLAME GRAPHS:
-#
-# Let's say you had the output of "perf script" in a file, out.stacks01, which
-# was for a 180 second profile. The following command creates a series of
-# flame graphs for each 10 second interval:
-#
-# for i in `seq 0 10 170`; do cat out.stacks01 | \
-#    ./perf2range.pl $i $((i + 10)) | ./stackcollapse-perf.pl | \
-#    grep -v cpu_idle | ./flamegraph.pl --hash --color=java \
-#    --title="range $i $((i + 10))" > out.range_$i.svg; echo $i done; done
-#
-# In that example, I used "--color=java" for the Java palette, and excluded
-# the idle CPU task. Customize as needed.
-#
-# Copyright 2017 Netflix, Inc.
-# Licensed under the Apache License, Version 2.0 (the "License")
-#
-# 21-Feb-2017	Brendan Gregg	Created this.
-
-use strict;
-use Getopt::Long;
-use POSIX 'floor';
-
-sub usage {
-    die <<USAGE_END;
-USAGE: $0 [options] min_seconds max_seconds
-	--timeraw	# use raw timestamps from perf
-	--timezerosecs	# time starts at 0 secs, but keep offset from perf
-	eg,
-	$0 10 20	# only include samples between 10 and 20 seconds
-USAGE_END
-}
-
-my $timeraw = 0;
-my $timezerosecs = 0;
-GetOptions(
-    'timeraw'      => \$timeraw,
-    'timezerosecs' => \$timezerosecs,
-) or usage();
-
-if (@ARGV < 2 || $ARGV[0] eq "-h" || $ARGV[0] eq "--help") {
-    usage();
-    exit;
-}
-my $begin = $ARGV[0];
-my $end = $ARGV[1];
-
-#
-# Parsing
-#
-# IP only examples:
-#
-# java 52025 [026] 99161.926202: cycles:
-# java 14341 [016] 252732.474759: cycles:      7f36571947c0 nmethod::is_nmethod() const (/...
-# java 14514 [022] 28191.353083: cpu-clock:      7f92b4fdb7d4 Ljava_util_List$size$0;::call (/tmp/perf-11936.map)
-#      swapper     0 [002] 6035557.056977:   10101010 cpu-clock:  ffffffff810013aa xen_hypercall_sched_op+0xa (/lib/modules/4.9-virtual/build/vmlinux)
-#         bash 25370 603are 6036.991603:   10101010 cpu-clock:            4b931e [unknown] (/bin/bash)
-#         bash 25370/25370 6036036.799684: cpu-clock:            4b913b [unknown] (/bin/bash)
-# other combinations are possible.
-#
-# Stack examples (-g):
-#
-# swapper     0 [021] 28648.467059: cpu-clock:
-#	ffffffff810013aa xen_hypercall_sched_op ([kernel.kallsyms])
-#	ffffffff8101cb2f default_idle ([kernel.kallsyms])
-#	ffffffff8101d406 arch_cpu_idle ([kernel.kallsyms])
-#	ffffffff810bf475 cpu_startup_entry ([kernel.kallsyms])
-#	ffffffff81010228 cpu_bringup_and_idle ([kernel.kallsyms])
-#
-# java 14375 [022] 28648.467079: cpu-clock:
-#	    7f92bdd98965 Ljava/io/OutputStream;::write (/tmp/perf-11936.map)
-#	    7f8808cae7a8 [unknown] ([unknown])
-#
-# swapper     0 [005]  5076.836336: cpu-clock:
-#	ffffffff81051586 native_safe_halt ([kernel.kallsyms])
-#	ffffffff8101db4f default_idle ([kernel.kallsyms])
-#	ffffffff8101e466 arch_cpu_idle ([kernel.kallsyms])
-#	ffffffff810c2b31 cpu_startup_entry ([kernel.kallsyms])
-#	ffffffff810427cd start_secondary ([kernel.kallsyms])
-#
-# swapper     0 [002] 6034779.719110:   10101010 cpu-clock:
-#       2013aa xen_hypercall_sched_op+0xfe20000a (/lib/modules/4.9-virtual/build/vmlinux)
-#       a72f0e default_idle+0xfe20001e (/lib/modules/4.9-virtual/build/vmlinux)
-#       2392bf arch_cpu_idle+0xfe20000f (/lib/modules/4.9-virtual/build/vmlinux)
-#       a73333 default_idle_call+0xfe200023 (/lib/modules/4.9-virtual/build/vmlinux)
-#       2c91a4 cpu_startup_entry+0xfe2001c4 (/lib/modules/4.9-virtual/build/vmlinux)
-#       22b64a cpu_bringup_and_idle+0xfe20002a (/lib/modules/4.9-virtual/build/vmlinux)
-#
-# bash 25370/25370 6035935.188539: cpu-clock:
-#                   b9218 [unknown] (/bin/bash)
-#                 2037fe8 [unknown] ([unknown])
-# other combinations are possible.
-#
-# This regexp matches the event line, and puts time in $1, and the event name
-# in $2:
-#
-my $event_regexp = qr/ +([0-9\.]+): *\S* *(\S+):/;
-
-my $line;
-my $start = 0;
-my $ok = 0;
-my $time;
-
-while (1) {
-    $line = <STDIN>;
-    last unless defined $line;
-    next if $line =~ /^#/; # skip comments
-
-    if ($line =~ $event_regexp) {
-        my ($ts, $event) = ($1, $2, $3);
-        $start = $ts if $start == 0;
-
-        if ($timezerosecs) {
-            $time = $ts - floor($start);
-        }
-        elsif (!$timeraw) {
-            $time = $ts - $start;
-        }
-        else {
-            $time = $ts; # raw times
-        }
-
-        $ok = 1 if $time >= $begin;
-        # assume samples are in time order:
-        exit if $time > $end;
-    }
-
-    print $line if $ok;
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/record-test.sh b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/record-test.sh
deleted file mode 100644
index 19b54fb40..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/record-test.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-#
-# record-test.sh - Overwrite flame graph test result files.
-#
-# See test.sh, which checks these resulting files.
-#
-# Currently only tests stackcollapse-perf.pl.
-
-set -v -x
-
-# ToDo: add some form of --inline, and --inline --context tests. These are
-# tricky since they use addr2line, whose output will vary based on the test
-# system's binaries and symbol tables.
-for opt in pid tid kernel jit all addrs; do
-  for testfile in test/*.txt ; do
-    echo testing $testfile : $opt
-    outfile=${testfile#*/}
-    outfile=test/results/${outfile%.txt}"-collapsed-${opt}.txt"
-    ./stackcollapse-perf.pl --"${opt}" "${testfile}" 2> /dev/null > $outfile
-  done
-done
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-aix.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-aix.pl
deleted file mode 100644
index 1fbab32f0..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-aix.pl
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/perl -ws
-#
-# stackcollapse-aix  Collapse AIX /usr/bin/procstack backtraces
-#
-# Parse a list of backtraces as generated with the poor man's aix-perf.pl
-# profiler
-#
-
-use strict;
-
-my $process = "";
-my $current = "";
-my $previous_function = "";
-
-my %stacks;
-
-while (<>) {
-    chomp;
-    if (m/^\d+:/) {
-        if (!($current eq "")) {
-            $current = $process . ";" . $current;
-            $stacks{$current} += 1;
-            $current = "";
-        }
-        m/^\d+: ([^ ]*)/;
-        $process = $1;
-        $current = "";
-    }
-    elsif (m/^---------- tid# \d+/) {
-        if (!($current eq "")) {
-            $current = $process . ";" . $current;
-            $stacks{$current} += 1;
-        }
-        $current = "";
-    }
-    elsif (m/^(0x[0-9abcdef]*) *([^ ]*) ([^ ]*) ([^ ]*)/) {
-        my $function = $2;
-        my $alt = $1;
-        $function =~ s/\(.*\)?//;
-        if ($function =~ /^\[.*\]$/) {
-            $function = $alt;
-        }
-        if ($current) {
-            $current = $function . ";" . $current;
-        }
-        else {
-            $current = $function;
-        }
-    }
-}
-
-if (!($current eq "")) {
-    $current = $process . ";" . $current;
-    $stacks{$current} += 1;
-    $current = "";
-    $process = "";
-}
-
-foreach my $k (sort {$a cmp $b} keys %stacks) {
-    print "$k $stacks{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-bpftrace.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-bpftrace.pl
deleted file mode 100644
index 710641e25..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-bpftrace.pl
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-bpftrace.pl	collapse bpftrace samples into single lines.
-#
-# USAGE ./stackcollapse-bpftrace.pl infile > outfile
-#
-# Example input:
-#
-# @[
-# _raw_spin_lock_bh+0
-# tcp_recvmsg+808
-# inet_recvmsg+81
-# sock_recvmsg+67
-# sock_read_iter+144
-# new_sync_read+228
-# __vfs_read+41
-# vfs_read+142
-# sys_read+85
-# do_syscall_64+115
-# entry_SYSCALL_64_after_hwframe+61
-# ]: 3
-#
-# Example output:
-#
-# entry_SYSCALL_64_after_hwframe+61;do_syscall_64+115;sys_read+85;vfs_read+142;__vfs_read+41;new_sync_read+228;sock_read_iter+144;sock_recvmsg+67;inet_recvmsg+81;tcp_recvmsg+808;_raw_spin_lock_bh+0 3
-#
-# Copyright 2018 Peter Sanford.  All rights reserved.
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-#  (http://www.gnu.org/copyleft/gpl.html)
-#
-
-use strict;
-
-my @stack;
-my $in_stack = 0;
-
-foreach (<>) {
-    chomp;
-    if (!$in_stack) {
-        if (/^@\[/) {
-            $in_stack = 1;
-        }
-    }
-    else {
-        if (m/^\]: (\d+)/) {
-            print join(';', reverse(@stack)) . " $1\n";
-            $in_stack = 0;
-            @stack = ();
-        }
-        else {
-            push(@stack, $_);
-        }
-    }
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-elfutils.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-elfutils.pl
deleted file mode 100644
index 6f2c045b4..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-elfutils.pl
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-elfutils  Collapse elfutils stack (eu-stack) backtraces
-#
-# Parse a list of elfutils backtraces as generated with the poor man's
-# profiler [1]:
-#
-#   for x in $(seq 1 "$nsamples"); do
-#      eu-stack -p "$pid" "$@"
-#      sleep "$sleeptime"
-#   done
-#
-# [1] http://poormansprofiler.org/
-#
-# Copyright 2014 Gabriel Corona. All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-
-use strict;
-use Getopt::Long;
-
-my $with_pid = 0;
-my $with_tid = 0;
-
-GetOptions('pid' => \$with_pid,
-    'tid'        => \$with_tid)
-    or die <<USAGE_END;
-USAGE: $0 [options] infile > outfile\n
-        --pid           # include PID
-        --tid           # include TID
-USAGE_END
-
-my $pid = "";
-my $tid = "";
-my $current = "";
-my $previous_function = "";
-
-my %stacks;
-
-sub add_current {
-    if (!($current eq "")) {
-        my $entry;
-        if ($with_tid) {
-            $current = "TID=$tid;$current";
-        }
-        if ($with_pid) {
-            $current = "PID=$pid;$current";
-        }
-        $stacks{$current} += 1;
-        $current = "";
-    }
-}
-
-while (<>) {
-    chomp;
-    if (m/^PID ([0-9]*)/) {
-        add_current();
-        $pid = $1;
-    }
-    elsif (m/^TID ([0-9]*)/) {
-        add_current();
-        $tid = $1;
-    }
-    elsif (m/^#[0-9]* *0x[0-9a-f]* (.*)/) {
-        if ($current eq "") {
-            $current = $1;
-        }
-        else {
-            $current = "$1;$current";
-        }
-    }
-    elsif (m/^#[0-9]* *0x[0-9a-f]*/) {
-        if ($current eq "") {
-            $current = "[unknown]";
-        }
-        else {
-            $current = "[unknown];$current";
-        }
-    }
-}
-add_current();
-
-foreach my $k (sort {$a cmp $b} keys %stacks) {
-    print "$k $stacks{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-gdb.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-gdb.pl
deleted file mode 100644
index c276c0341..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-gdb.pl
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/perl -ws
-#
-# stackcollapse-gdb  Collapse GDB backtraces
-#
-# Parse a list of GDB backtraces as generated with the poor man's
-# profiler [1]:
-#
-#   for x in $(seq 1 500); do
-#      gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid 2> /dev/null
-#      sleep 0.01
-#    done
-#
-# [1] http://poormansprofiler.org/
-#
-# Copyright 2014 Gabriel Corona. All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-
-use strict;
-
-my $current = "";
-my $previous_function = "";
-
-my %stacks;
-
-while (<>) {
-    chomp;
-    if (m/^Thread/) {
-        $current = ""
-    }
-    elsif (m/^#[0-9]* *([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)/) {
-        my $function = $3;
-        my $alt = $1;
-        if (not ($1 =~ /0x[a-zA-Z0-9]*/)) {
-            $function = $alt;
-        }
-        if ($current eq "") {
-            $current = $function;
-        }
-        else {
-            $current = $function . ";" . $current;
-        }
-    }
-    elsif (!($current eq "")) {
-        $stacks{$current} += 1;
-        $current = "";
-    }
-}
-
-if (!($current eq "")) {
-    $stacks{$current} += 1;
-    $current = "";
-}
-
-foreach my $k (sort {$a cmp $b} keys %stacks) {
-    print "$k $stacks{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-go.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-go.pl
deleted file mode 100644
index 7d8a255f8..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-go.pl
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-go.pl  collapse golang samples into single lines.
-#
-# Parses golang smaples generated by "go tool pprof" and outputs stacks as
-# single lines, with methods separated by semicolons, and then a space and an
-# occurrence count. For use with flamegraph.pl.
-#
-# USAGE: ./stackcollapse-go.pl infile > outfile
-#
-# Example Input:
-#   ...
-#   Samples:
-#   samples/count cpu/nanoseconds
-#        1   10000000: 1 2
-#        2   10000000: 3 2
-#        1   10000000: 4 2
-#        ...
-#   Locations
-#        1: 0x58b265 scanblock :0 s=0
-#        2: 0x599530 GC :0 s=0
-#        3: 0x58a999 flushptrbuf :0 s=0
-#        4: 0x58d6a8 runtime.MSpan_Sweep :0 s=0
-#        ...
-#   Mappings
-#        ...
-#
-# Example Output:
-#
-#   GC;flushptrbuf 2
-#   GC;runtime.MSpan_Sweep 1
-#   GC;scanblock 1
-#
-# Input may contain many stacks as generated from go tool pprof:
-#
-#   go tool pprof -seconds=60 -raw -output=a.pprof http://$ADDR/debug/pprof/profile
-#
-# For format of text profile, See golang/src/internal/pprof/profile/profile.go
-#
-# Copyright 2017 Sijie Yang (yangsijie@baidu.com).  All rights reserved.
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-#  (http://www.gnu.org/copyleft/gpl.html)
-#
-# 16-Jan-2017   Sijie Yang   Created this.
-
-use strict;
-
-use Getopt::Long;
-
-# tunables
-my $help = 0;
-
-sub usage {
-    die <<USAGE_END;
-USAGE: $0 infile > outfile\n
-USAGE_END
-}
-
-GetOptions(
-    'help' => \$help,
-) or usage();
-$help && usage();
-
-# internals
-my $state = "ignore";
-my %stacks;
-my %frames;
-my %collapsed;
-
-sub remember_stack {
-    my ($stack, $count) = @_;
-    $stacks{$stack} += $count;
-}
-
-#
-# Output stack string in required format. For example, for the following samples,
-# format_statck() would return GC;runtime.MSpan_Sweep for stack "4 2"
-#
-#   Locations
-#        1: 0x58b265 scanblock :0 s=0
-#        2: 0x599530 GC :0 s=0
-#        3: 0x58a999 flushptrbuf :0 s=0
-#        4: 0x58d6a8 runtime.MSpan_Sweep :0 s=0
-#
-sub format_statck {
-    my ($stack) = @_;
-    my @loc_list = split(/ /, $stack);
-
-    for (my $i = 0; $i <= $#loc_list; $i++) {
-        my $loc_name = $frames{$loc_list[$i]};
-        $loc_list[$i] = $loc_name if ($loc_name);
-    }
-    return join(";", reverse(@loc_list));
-}
-
-foreach (<>) {
-    next if m/^#/;
-    chomp;
-
-    if ($state eq "ignore") {
-        if (/Samples:/) {
-            $state = "sample";
-            next;
-        }
-
-    }
-    elsif ($state eq "sample") {
-        if (/^\s*([0-9]+)\s*[0-9]+: ([0-9 ]+)/) {
-            my $samples = $1;
-            my $stack = $2;
-            remember_stack($stack, $samples);
-        }
-        elsif (/Locations/) {
-            $state = "location";
-            next;
-        }
-
-    }
-    elsif ($state eq "location") {
-        if (/^\s*([0-9]*): 0x[0-9a-f]+ (M=[0-9]+ )?([^ ]+) .*/) {
-            my $loc_id = $1;
-            my $loc_name = $3;
-            $frames{$loc_id} = $loc_name;
-        }
-        elsif (/Mappings/) {
-            $state = "mapping";
-            last;
-        }
-    }
-}
-
-foreach my $k (keys %stacks) {
-    my $stack = format_statck($k);
-    my $count = $stacks{$k};
-    $collapsed{$stack} += $count;
-}
-
-foreach my $k (sort {$a cmp $b} keys %collapsed) {
-    print "$k $collapsed{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-instruments.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-instruments.pl
deleted file mode 100644
index 510291faa..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-instruments.pl
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-instruments.pl
-#
-# Parses a CSV file containing a call tree as produced by XCode
-# Instruments and produces output suitable for flamegraph.pl.
-#
-# USAGE: ./stackcollapse-instruments.pl infile > outfile
-
-use strict;
-
-my @stack = ();
-
-<>;
-foreach (<>) {
-    chomp;
-    /\d+\.\d+ms[^,]+,(\d+(?:\.\d*)?),\s+,(\s*)(.+)/ or die;
-    my $func = $3;
-    my $depth = length($2);
-    $stack[$depth] = $3;
-    foreach my $i (0 .. $depth - 1) {
-        print $stack[$i];
-        print ";";
-    }
-    print "$func $1\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-java-exceptions.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-java-exceptions.pl
deleted file mode 100644
index 29ff84537..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-java-exceptions.pl
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcolllapse-java-exceptions.pl	collapse java exceptions (found in logs) into single lines.
-#
-# Parses Java error stacks found in a log file and outputs them as
-# single lines, with methods separated by semicolons, and then a space and an
-# occurrence count. Inspired by stackcollapse-jstack.pl except that it does
-# not act as a performance profiler.
-#
-# It can be useful if a Java process dumps a lot of different stacks in its logs
-# and you want to quickly identify the biggest culprits.
-#
-# USAGE: ./stackcollapse-java-exceptions.pl infile > outfile
-#
-# Copyright 2018 Paul de Verdiere. All rights reserved.
-
-use strict;
-use Getopt::Long;
-
-# tunables
-my $shorten_pkgs = 0; # shorten package names
-my $no_pkgs = 0;      # really shorten package names!!
-my $help = 0;
-
-sub usage {
-    die <<USAGE_END;
-USAGE: $0 [options] infile > outfile\n
-	--shorten-pkgs : shorten package names
-  --no-pkgs      : suppress package names (makes SVG much more readable)
-
-USAGE_END
-}
-
-GetOptions(
-    'shorten-pkgs!' => \$shorten_pkgs,
-    'no-pkgs!'      => \$no_pkgs,
-    'help'          => \$help,
-) or usage();
-$help && usage();
-
-my %collapsed;
-
-sub remember_stack {
-    my ($stack, $count) = @_;
-    $collapsed{$stack} += $count;
-}
-
-my @stack;
-
-foreach (<>) {
-    chomp;
-
-    if (/^\s*at ([^\(]*)/) {
-        my $func = $1;
-        if ($shorten_pkgs || $no_pkgs) {
-            my ($pkgs, $clsFunc) = ($func =~ m/(.*\.)([^.]+\.[^.]+)$/);
-            $pkgs =~ s/(\w)\w*/$1/g;
-            $func = $no_pkgs ? $clsFunc : $pkgs . $clsFunc;
-        }
-        unshift @stack, $func;
-    }
-    elsif (@stack) {
-        next if m/.*waiting on .*/;
-        remember_stack(join(";", @stack), 1) if @stack;
-        undef @stack;
-    }
-}
-
-remember_stack(join(";", @stack), 1) if @stack;
-
-foreach my $k (sort {$a cmp $b} keys %collapsed) {
-    print "$k $collapsed{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-jstack.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-jstack.pl
deleted file mode 100644
index a480a9425..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-jstack.pl
+++ /dev/null
@@ -1,180 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-jstack.pl	collapse jstack samples into single lines.
-#
-# Parses Java stacks generated by jstack(1) and outputs RUNNABLE stacks as
-# single lines, with methods separated by semicolons, and then a space and an
-# occurrence count. This also filters some other "RUNNABLE" states that we
-# know are probably not running, such as epollWait. For use with flamegraph.pl.
-#
-# You want this to process the output of at least 100 jstack(1)s. ie, run it
-# 100 times with a sleep interval, and append to a file. This is really a poor
-# man's Java profiler, due to the overheads of jstack(1), and how it isn't
-# capturing stacks asynchronously. For a better profiler, see:
-# http://www.brendangregg.com/blog/2014-06-12/java-flame-graphs.html
-#
-# USAGE: ./stackcollapse-jstack.pl infile > outfile
-#
-# Example input:
-#
-# "MyProg" #273 daemon prio=9 os_prio=0 tid=0x00007f273c038800 nid=0xe3c runnable [0x00007f28a30f2000]
-#    java.lang.Thread.State: RUNNABLE
-#        at java.net.SocketInputStream.socketRead0(Native Method)
-#        at java.net.SocketInputStream.read(SocketInputStream.java:121)
-#        ...
-#        at java.lang.Thread.run(Thread.java:744)
-#
-# Example output:
-#
-#  MyProg;java.lang.Thread.run;java.net.SocketInputStream.read;java.net.SocketInputStream.socketRead0 1
-#
-# Input may be created and processed using:
-#
-#  i=0; while (( i++ < 200 )); do jstack PID >> out.jstacks; sleep 10; done
-#  cat out.jstacks | ./stackcollapse-jstack.pl > out.stacks-folded
-#
-# WARNING: jstack(1) incurs overheads. Test before use, or use a real profiler.
-#
-# Copyright 2014 Brendan Gregg.  All rights reserved.
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-#  (http://www.gnu.org/copyleft/gpl.html)
-#
-# 14-Sep-2014	Brendan Gregg	Created this.
-
-use strict;
-
-use Getopt::Long;
-
-# tunables
-my $include_tname = 1; # include thread names in stacks
-my $include_tid = 0;   # include thread IDs in stacks
-my $shorten_pkgs = 0;  # shorten package names
-my $help = 0;
-
-sub usage {
-    die <<USAGE_END;
-USAGE: $0 [options] infile > outfile\n
-	--include-tname
-	--no-include-tname # include/omit thread names in stacks (default: include)
-	--include-tid
-	--no-include-tid   # include/omit thread IDs in stacks (default: omit)
-	--shorten-pkgs
-	--no-shorten-pkgs  # (don't) shorten package names (default: don't shorten)
-
-	eg,
-	$0 --no-include-tname stacks.txt > collapsed.txt
-USAGE_END
-}
-
-GetOptions(
-    'include-tname!' => \$include_tname,
-    'include-tid!'   => \$include_tid,
-    'shorten-pkgs!'  => \$shorten_pkgs,
-    'help'           => \$help,
-) or usage();
-$help && usage();
-
-
-# internals
-my %collapsed;
-
-sub remember_stack {
-    my ($stack, $count) = @_;
-    $collapsed{$stack} += $count;
-}
-
-my @stack;
-my $tname;
-my $state = "?";
-
-foreach (<>) {
-    next if m/^#/;
-    chomp;
-
-    if (m/^$/) {
-        # only include RUNNABLE states
-        goto clear if $state ne "RUNNABLE";
-
-        # save stack
-        if (defined $tname) {unshift @stack, $tname;}
-        remember_stack(join(";", @stack), 1) if @stack;
-        clear:
-        undef @stack;
-        undef $tname;
-        $state = "?";
-        next;
-    }
-
-    #
-    # While parsing jstack output, the $state variable may be altered from
-    # RUNNABLE to other states. This causes the stacks to be filtered later,
-    # since only RUNNABLE stacks are included.
-    #
-
-    if (/^"([^"]*)/) {
-        my $name = $1;
-
-        if ($include_tname) {
-            $tname = $name;
-            unless ($include_tid) {
-                $tname =~ s/-\d+$//;
-            }
-        }
-
-        # set state for various background threads
-        $state = "BACKGROUND" if $name =~ /C. CompilerThread/;
-        $state = "BACKGROUND" if $name =~ /Signal Dispatcher/;
-        $state = "BACKGROUND" if $name =~ /Service Thread/;
-        $state = "BACKGROUND" if $name =~ /Attach Listener/;
-
-    }
-    elsif (/java.lang.Thread.State: (\S+)/) {
-        $state = $1 if $state eq "?";
-    }
-    elsif (/^\s*at ([^\(]*)/) {
-        my $func = $1;
-        if ($shorten_pkgs) {
-            my ($pkgs, $clsFunc) = ($func =~ m/(.*\.)([^.]+\.[^.]+)$/);
-            $pkgs =~ s/(\w)\w*/$1/g;
-            $func = $pkgs . $clsFunc;
-        }
-        unshift @stack, $func;
-
-        # fix state for epollWait
-        $state = "WAITING" if $func =~ /epollWait/;
-        $state = "WAITING" if $func =~ /EPoll\.wait/;
-
-
-        # fix state for various networking functions
-        $state = "NETWORK" if $func =~ /socketAccept$/;
-        $state = "NETWORK" if $func =~ /Socket.*accept0$/;
-        $state = "NETWORK" if $func =~ /socketRead0$/;
-
-    }
-    elsif (/^\s*-/ or /^2\d\d\d-/ or /^Full thread dump/ or
-        /^JNI global references:/) {
-        # skip these info lines
-        next;
-    }
-    else {
-        warn "Unrecognized line: $_";
-    }
-}
-
-foreach my $k (sort {$a cmp $b} keys %collapsed) {
-    print "$k $collapsed{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-ljp.awk b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-ljp.awk
deleted file mode 100644
index 59aaae3d7..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-ljp.awk
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/awk -f
-#
-# stackcollapse-ljp.awk	collapse lightweight java profile reports
-#				into single lines stacks.
-#
-# Parses a list of multiline stacks generated by:
-#
-#  https://code.google.com/p/lightweight-java-profiler
-#
-# and outputs a semicolon separated stack followed by a space and a count.
-#
-# USAGE: ./stackcollapse-ljp.pl infile > outfile
-#
-# Example input:
-#
-#  42 3  my_func_b(prog.java:455)
-#        my_func_a(prog.java:123)
-#        java.lang.Thread.run(Thread.java:744)
-#  [...]
-#
-# Example output:
-#
-#  java.lang.Thread.run;my_func_a;my_func_b 42
-#
-# The unused number is the number of frames in each stack.
-#
-# Copyright 2014 Brendan Gregg.  All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# 12-Jun-2014	Brendan Gregg	Created this.
-
-$1 == "Total" {
-	# We're done. Print last stack and exit.
-	print stack, count
-	exit
-}
-
-{
-	# Strip file location. Comment this out to keep.
-	gsub(/\(.*\)/, "")
-}
-
-NF == 3 {
-	# New stack begins. Print previous buffered stack.
-	if (count)
-		print stack, count
-
-	# Begin a new stack.
-	count = $1
-	stack = $3
-}
-
-NF == 1 {
-	# Build stack.
-	stack = $1 ";" stack
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-perf-sched.awk b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-perf-sched.awk
deleted file mode 100644
index e1a122d45..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-perf-sched.awk
+++ /dev/null
@@ -1,228 +0,0 @@
-#!/usr/bin/awk -f
-
-#
-# This program generates collapsed off-cpu stacks fit for use by flamegraph.pl
-# from scheduler data collected via perf_events.
-#
-# Outputs the cumulative time off cpu in us for each distinct stack observed.
-#
-# Some awk variables further control behavior:
-#
-#   record_tid          If truthy, causes all stack traces to include the
-#                       command and LWP id.
-#
-#   record_wake_stack   If truthy, stacks include the frames from the wakeup
-#                       event in addition to the sleep event.
-#                       See http://www.brendangregg.com/FlameGraphs/offcpuflamegraphs.html#Wakeup
-#
-#   recurse             If truthy, attempt to recursively identify and
-#                       visualize the full wakeup stack chain.
-#                       See http://www.brendangregg.com/FlameGraphs/offcpuflamegraphs.html#ChainGraph
-#
-#                       Note that this is only an approximation, as only the
-#                       last sleep event is recorded (e.g. if a thread slept
-#                       multiple times before waking another thread, only the
-#                       last sleep event is used). Implies record_wake_stack=1
-#
-# To set any of these variables from the command line, run via:
-#
-#    stackcollapse-perf-sched.awk -v recurse=1
-#
-# == Important warning ==
-#
-# WARNING: tracing all scheduler events is very high overhead in perf. Even
-# more alarmingly, there appear to be bugs in perf that prevent it from reliably
-# getting consistent traces (even with large trace buffers), causing it to
-# produce empty perf.data files with error messages of the form:
-#
-#   0x952790 [0x736d]: failed to process type: 3410
-#
-# This failure is not determinisitic, so re-executing perf record will
-# eventually succeed.
-#
-# == Usage ==
-#
-# First, record data via perf_events:
-#
-# sudo perf record -g -e 'sched:sched_switch' \
-#       -e 'sched:sched_stat_sleep' -e 'sched:sched_stat_blocked' \
-#       -p <pid> -o perf.data  -- sleep 1
-#
-# Then post process with this script:
-#
-# sudo perf script -f time,comm,pid,tid,event,ip,sym,dso,trace -i perf.data | \
-#       stackcollapse-perf-sched.awk -v recurse=1 | \
-#       flamegraph.pl --color=io --countname=us >out.svg
-#
-
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2015 by MemSQL. All rights reserved.
-#
-
-#
-# Match a perf captured variable, returning just the contents. For example, for
-# the following line, get_perf_captured_variable("pid") would return "27235":
-#
-#     swapper     0 [006] 708189.626415: sched:sched_stat_sleep: comm=memsqld pid=27235 delay=100078421 [ns
-#
-function get_perf_captured_variable(variable)
-{
-	match($0, variable "=[^[:space:]]+")
-	return substr($0, RSTART + length(variable) + 1,
-                      RLENGTH - length(variable) - 1)
-}
-
-#
-# The timestamp is the first field that ends in a colon, e.g.:
-#
-#     swapper     0 [006] 708189.626415: sched:sched_stat_sleep: comm=memsqld pid=27235 delay=100078421 [ns
-#
-# or
-#
-#     swapper     0/0     708189.626415: sched:sched_stat_sleep: comm=memsqld pid=27235 delay=100078421 [ns]
-#
-function get_perf_timestamp()
-{
-	match($0, " [^ :]+:")
-	return substr($0, RSTART + 1, RLENGTH - 2)
-}
-
-!/^#/ && /sched:sched_switch/ {
-	switchcommand = get_perf_captured_variable("comm")
-
-	switchpid = get_perf_captured_variable("prev_pid")
-
-	switchtime=get_perf_timestamp()
-
-	switchstack=""
-}
-
-#
-# Strip the function name from a stack entry
-#
-# Stack entry is expected to be formatted like:
-#           c60849 MyClass::Foo(unsigned long) (/home/areece/a.out)
-#
-function get_function_name()
-{
-	# We start from 2 since we don't need the hex offset.
-	# We stop at NF - 1 since we don't need the library path.
-	funcname = $2
-	for (i = 3; i <= NF - 1; i++) {
-		funcname = funcname " " $i
-	}
-	return funcname
-}
-
-(switchpid != 0 && /^\s/) {
-	if (switchstack == "")  {
-		switchstack = get_function_name()
-	} else {
-		switchstack = get_function_name() ";" switchstack
-	}
-}
-
-(switchpid != 0 && /^$/) {
-	switch_stacks[switchpid] = switchstack
-	delete last_switch_stacks[switchpid]
-	switch_time[switchpid] = switchtime
-
-	switchpid=0
-	switchcommand=""
-	switchstack=""
-}
-
-!/^#/ && (/sched:sched_stat_sleep/ || /sched:sched_stat_blocked/) {
-	wakecommand=$1
-	wakepid=$2
-
-	waketime=get_perf_timestamp()
-
-	stat_next_command = get_perf_captured_variable("comm")
-
-	stat_next_pid = get_perf_captured_variable("pid")
-
-	stat_delay_ns = int(get_perf_captured_variable("delay"))
-
-	wakestack=""
-}
-
-(stat_next_pid != 0 && /^\s/) {
-	if (wakestack == "") {
-		wakestack = get_function_name()
-	} else {
-		# We build the wakestack in reverse order.
-		wakestack = wakestack ";" get_function_name()
-	}
-}
-
-(stat_next_pid != 0 && /^$/) {
-	#
-	# For some reason, perf appears to output duplicate
-	# sched:sched_stat_sleep and sched:sched_stat_blocked events. We only
-	# handle the first event.
-	#
-	if (stat_next_pid in switch_stacks) {
-		last_wake_time[stat_next_pid] = waketime
-
-		stack = switch_stacks[stat_next_pid]
-		if (recurse || record_wake_stack) {
-			stack = stack ";" wakestack
-			if (record_tid) {
-				stack = stack ";" wakecommand "-" wakepid
-			} else {
-				stack = stack ";" wakecommand
-			}
-		}
-
-		if (recurse) {
-			if (last_wake_time[wakepid] > last_switch_time[stat_next_pid]) {
-				stack = stack ";-;" last_switch_stacks[wakepid]
-			}
-			last_switch_stacks[stat_next_pid] = stack
-		}
-
-		delete switch_stacks[stat_next_pid]
-
-		if (record_tid) {
-			stack_times[stat_next_command "-" stat_next_pid ";" stack] += stat_delay_ns
-		} else {
-			stack_times[stat_next_command ";" stack] += stat_delay_ns
-		}
-	}
-
-	wakecommand=""
-	wakepid=0
-	stat_next_pid=0
-	stat_next_command=""
-	stat_delay_ms=0
-}
-
-END {
-	for (stack in stack_times) {
-		if (int(stack_times[stack] / 1000) > 0) {
-			print stack, int(stack_times[stack] / 1000)
-		}
-	}
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-perf.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-perf.pl
deleted file mode 100644
index 35c1c16e0..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-perf.pl
+++ /dev/null
@@ -1,358 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-perf.pl	collapse perf samples into single lines.
-#
-# Parses a list of multiline stacks generated by "perf script", and
-# outputs a semicolon separated stack followed by a space and a count.
-# If memory addresses (+0xd) are present, they are stripped, and resulting
-# identical stacks are colased with their counts summed.
-#
-# USAGE: ./stackcollapse-perf.pl [options] infile > outfile
-#
-# Run "./stackcollapse-perf.pl -h" to list options.
-#
-# Example input:
-#
-#  swapper     0 [000] 158665.570607: cpu-clock:
-#         ffffffff8103ce3b native_safe_halt ([kernel.kallsyms])
-#         ffffffff8101c6a3 default_idle ([kernel.kallsyms])
-#         ffffffff81013236 cpu_idle ([kernel.kallsyms])
-#         ffffffff815bf03e rest_init ([kernel.kallsyms])
-#         ffffffff81aebbfe start_kernel ([kernel.kallsyms].init.text)
-#  [...]
-#
-# Example output:
-#
-#  swapper;start_kernel;rest_init;cpu_idle;default_idle;native_safe_halt 1
-#
-# Input may be created and processed using:
-#
-#  perf record -a -g -F 997 sleep 60
-#  perf script | ./stackcollapse-perf.pl > out.stacks-folded
-#
-# The output of "perf script" should include stack traces. If these are missing
-# for you, try manually selecting the perf script output; eg:
-#
-#  perf script -f comm,pid,tid,cpu,time,event,ip,sym,dso,trace | ...
-#
-# This is also required for the --pid or --tid options, so that the output has
-# both the PID and TID.
-#
-# Copyright 2012 Joyent, Inc.  All rights reserved.
-# Copyright 2012 Brendan Gregg.  All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# 02-Mar-2012	Brendan Gregg	Created this.
-# 02-Jul-2014	   "	  "	Added process name to stacks.
-
-use strict;
-use Getopt::Long;
-
-my %collapsed;
-
-sub remember_stack {
-    my ($stack, $count) = @_;
-    $collapsed{$stack} += $count;
-}
-my $annotate_kernel = 0; # put an annotation on kernel function
-my $annotate_jit = 0;    # put an annotation on jit symbols
-my $annotate_all = 0;    # enale all annotations
-my $include_pname = 1;   # include process names in stacks
-my $include_pid = 0;     # include process ID with process name
-my $include_tid = 0;     # include process & thread ID with process name
-my $include_addrs = 0;   # include raw address where a symbol can't be found
-my $tidy_java = 1;       # condense Java signatures
-my $tidy_generic = 1;    # clean up function names a little
-my $target_pname;        # target process name from perf invocation
-my $event_filter = "";   # event type filter, defaults to first encountered event
-my $event_defaulted = 0; # whether we defaulted to an event (none provided)
-my $event_warning = 0;   # if we printed a warning for the event
-
-my $show_inline = 0;
-my $show_context = 0;
-GetOptions('inline'  => \$show_inline,
-    'context'        => \$show_context,
-    'pid'            => \$include_pid,
-    'kernel'         => \$annotate_kernel,
-    'jit'            => \$annotate_jit,
-    'all'            => \$annotate_all,
-    'tid'            => \$include_tid,
-    'addrs'          => \$include_addrs,
-    'event-filter=s' => \$event_filter)
-    or die <<USAGE_END;
-USAGE: $0 [options] infile > outfile\n
-	--pid		# include PID with process names [1]
-	--tid		# include TID and PID with process names [1]
-	--inline	# un-inline using addr2line
-	--all		# all annotations (--kernel --jit)
-	--kernel	# annotate kernel functions with a _[k]
-	--jit		# annotate jit functions with a _[j]
-	--context	# adds source context to --inline
-	--addrs		# include raw addresses where symbols can't be found
-	--event-filter=EVENT	# event name filter\n
-[1] perf script must emit both PID and TIDs for these to work; eg, Linux < 4.1:
-	perf script -f comm,pid,tid,cpu,time,event,ip,sym,dso,trace
-    for Linux >= 4.1:
-	perf script -F comm,pid,tid,cpu,time,event,ip,sym,dso,trace
-    If you save this output add --header on Linux >= 3.14 to include perf info.
-USAGE_END
-
-if ($annotate_all) {
-    $annotate_kernel = $annotate_jit = 1;
-}
-
-# for the --inline option
-sub inline {
-    my ($pc, $mod) = @_;
-
-    # capture addr2line output
-    my $a2l_output = `addr2line -a $pc -e $mod -i -f -s -C`;
-
-    # remove first line
-    $a2l_output =~ s/^(.*\n){1}//;
-
-    my @fullfunc;
-    my $one_item = "";
-    for (split /^/, $a2l_output) {
-        chomp $_;
-
-        # remove discriminator info if exists
-        $_ =~ s/ \(discriminator \S+\)//;
-
-        if ($one_item eq "") {
-            $one_item = $_;
-        }
-        else {
-            if ($show_context == 1) {
-                unshift @fullfunc, $one_item . ":$_";
-            }
-            else {
-                unshift @fullfunc, $one_item;
-            }
-            $one_item = "";
-        }
-    }
-
-    return join(";", @fullfunc);
-}
-
-my @stack;
-my $pname;
-my $m_pid;
-my $m_tid;
-
-#
-# Main loop
-#
-while (defined($_ = <>)) {
-
-    # find the name of the process launched by perf, by stepping backwards
-    # over the args to find the first non-option (no dash):
-    if (/^# cmdline/) {
-        my @args = split ' ', $_;
-        foreach my $arg (reverse @args) {
-            if ($arg !~ /^-/) {
-                $target_pname = $arg;
-                $target_pname =~ s:.*/::; # strip pathname
-                last;
-            }
-        }
-    }
-
-    # skip remaining comments
-    next if m/^#/;
-    chomp;
-
-    # end of stack. save cached data.
-    if (m/^$/) {
-        # ignore filtered samples
-        next if not $pname;
-
-        if ($include_pname) {
-            if (defined $pname) {
-                unshift @stack, $pname;
-            }
-            else {
-                unshift @stack, "";
-            }
-        }
-        remember_stack(join(";", @stack), 1) if @stack;
-        undef @stack;
-        undef $pname;
-        next;
-    }
-
-    #
-    # event record start
-    #
-    if (/^(\S.+?)\s+(\d+)\/*(\d+)*\s+/) {
-        # default "perf script" output has TID but not PID
-        # eg, "java 25607 4794564.109216: cycles:"
-        # eg, "java 12688 [002] 6544038.708352: cpu-clock:"
-        # eg, "V8 WorkerThread 25607 4794564.109216: cycles:"
-        # eg, "java 24636/25607 [000] 4794564.109216: cycles:"
-        # eg, "java 12688/12764 6544038.708352: cpu-clock:"
-        # eg, "V8 WorkerThread 24636/25607 [000] 94564.109216: cycles:"
-        # other combinations possible
-        my ($comm, $pid, $tid) = ($1, $2, $3);
-        if (not $tid) {
-            $tid = $pid;
-            $pid = "?";
-        }
-
-        if (/(\S+):\s*$/) {
-            my $event = $1;
-
-            if ($event_filter eq "") {
-                # By default only show events of the first encountered
-                # event type. Merging together different types, such as
-                # instructions and cycles, produces misleading results.
-                $event_filter = $event;
-                $event_defaulted = 1;
-            }
-            elsif ($event ne $event_filter) {
-                if ($event_defaulted and $event_warning == 0) {
-                    # only print this warning if necessary:
-                    # when we defaulted and there was
-                    # multiple event types.
-                    print STDERR "Filtering for events of type: $event\n";
-                    $event_warning = 1;
-                }
-                next;
-            }
-        }
-
-        ($m_pid, $m_tid) = ($pid, $tid);
-
-        if ($include_tid) {
-            $pname = "$comm-$m_pid/$m_tid";
-        }
-        elsif ($include_pid) {
-            $pname = "$comm-$m_pid";
-        }
-        else {
-            $pname = "$comm";
-        }
-        $pname =~ tr/ /_/;
-
-        #
-        # stack line
-        #
-    }
-    elsif (/^\s*(\w+)\s*(.+) \((\S*)\)/) {
-        # ignore filtered samples
-        next if not $pname;
-
-        my ($pc, $rawfunc, $mod) = ($1, $2, $3);
-
-        # Linux 4.8 included symbol offsets in perf script output by default, eg:
-        # 7fffb84c9afc cpu_startup_entry+0x800047c022ec ([kernel.kallsyms])
-        # strip these off:
-        $rawfunc =~ s/\+0x[\da-f]+$//;
-
-        if ($show_inline == 1 && $mod !~ m/(perf-\d+.map|kernel\.|\[[^\]]+\])/) {
-            unshift @stack, inline($pc, $mod);
-            next;
-        }
-
-        next if $rawfunc =~ /^\(/; # skip process names
-
-        my @inline;
-        for (split /\->/, $rawfunc) {
-            my $func = $_;
-
-            if ($func eq "[unknown]") {
-                if ($mod ne "[unknown]") {
-                    # use module name instead, if known
-                    $func = $mod;
-                    $func =~ s/.*\///;
-                }
-                else {
-                    $func = "unknown";
-                }
-
-                if ($include_addrs) {
-                    $func = "\[$func \<$pc\>\]";
-                }
-                else {
-                    $func = "\[$func\]";
-                }
-            }
-
-            if ($tidy_generic) {
-                $func =~ s/;/:/g;
-                if ($func !~ m/\.\(.*\)\./) {
-                    # This doesn't look like a Go method name (such as
-                    # "net/http.(*Client).Do"), so everything after the first open
-                    # paren (that is not part of an "(anonymous namespace)") is
-                    # just noise.
-                    $func =~ s/\((?!anonymous namespace\)).*//;
-                }
-                # now tidy this horrible thing:
-                # 13a80b608e0a RegExp:[&<>\"\'] (/tmp/perf-7539.map)
-                $func =~ tr/"\'//d;
-                # fall through to $tidy_java
-            }
-
-            if ($tidy_java and $pname eq "java") {
-                # along with $tidy_generic, converts the following:
-                #	Lorg/mozilla/javascript/ContextFactory;.call(Lorg/mozilla/javascript/ContextAction;)Ljava/lang/Object;
-                #	Lorg/mozilla/javascript/ContextFactory;.call(Lorg/mozilla/javascript/C
-                #	Lorg/mozilla/javascript/MemberBox;.<init>(Ljava/lang/reflect/Method;)V
-                # into:
-                #	org/mozilla/javascript/ContextFactory:.call
-                #	org/mozilla/javascript/ContextFactory:.call
-                #	org/mozilla/javascript/MemberBox:.init
-                $func =~ s/^L// if $func =~ m:/:;
-            }
-
-            #
-            # Annotations
-            #
-            # detect inlined from the @inline array
-            # detect kernel from the module name; eg, frames to parse include:
-            #          ffffffff8103ce3b native_safe_halt ([kernel.kallsyms])
-            #          8c3453 tcp_sendmsg (/lib/modules/4.3.0-rc1-virtual/build/vmlinux)
-            #          7d8 ipv4_conntrack_local+0x7f8f80b8 ([nf_conntrack_ipv4])
-            # detect jit from the module name; eg:
-            #          7f722d142778 Ljava/io/PrintStream;::print (/tmp/perf-19982.map)
-            if (scalar(@inline) > 0) {
-                $func .= "_[i]"; # inlined
-            }
-            elsif ($annotate_kernel == 1 && $mod =~ m/(^\[|vmlinux$)/ && $mod !~ /unknown/) {
-                $func .= "_[k]"; # kernel
-            }
-            elsif ($annotate_jit == 1 && $mod =~ m:/tmp/perf-\d+\.map:) {
-                $func .= "_[j]"; # jitted
-            }
-            push @inline, $func;
-        }
-
-        unshift @stack, @inline;
-    }
-    else {
-        warn "Unrecognized line: $_";
-    }
-}
-
-foreach my $k (sort {$a cmp $b} keys %collapsed) {
-    print "$k $collapsed{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-pmc.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-pmc.pl
deleted file mode 100644
index dd76e8254..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-pmc.pl
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env perl
-#
-# Copyright (c) 2014 Ed Maste.  All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-# stackcollapse-pmc.pl		collapse hwpmc samples into single lines.
-#
-# Parses a list of multiline stacks generated by "hwpmc -G", and outputs a
-# semicolon-separated stack followed by a space and a count.
-#
-# Usage:
-#   pmcstat -S unhalted-cycles -O pmc.out
-#   pmcstat -R pmc.out -z16 -G pmc.graph
-#   stackcollapse-pmc.pl pmc.graph > pmc.stack
-#
-# Example input:
-#
-# 03.07%  [17]       witness_unlock @ /boot/kernel/kernel
-#  70.59%  [12]        __mtx_unlock_flags
-#   16.67%  [2]          selfdfree
-#    100.0%  [2]           sys_poll
-#     100.0%  [2]            amd64_syscall
-#   08.33%  [1]          pmap_ts_referenced
-#    100.0%  [1]           vm_pageout
-#     100.0%  [1]            fork_exit
-# ...
-#
-# Example output:
-#
-# amd64_syscall;sys_poll;selfdfree;__mtx_unlock_flags;witness_unlock 2
-# amd64_syscall;sys_poll;pmap_ts_referenced;__mtx_unlock_flagsgeout;fork_exit 1
-# ...
-
-use warnings;
-use strict;
-
-my @stack;
-my $prev_count;
-my $prev_indent = -1;
-
-foreach (<>) {
-    if (m/^( *)[0-9.]+%  \[([0-9]+)\]\s*(\S+)/) {
-        my $indent = length($1);
-        if ($indent <= $prev_indent) {
-            print join(';', reverse(@stack[0 .. $prev_indent])) .
-                " $prev_count\n";
-        }
-        $stack[$indent] = $3;
-        $prev_count = $2;
-        $prev_indent = $indent;
-    }
-}
-print join(';', reverse(@stack[0 .. $prev_indent])) . " $prev_count\n";
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-recursive.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-recursive.pl
deleted file mode 100644
index 756bb08f0..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-recursive.pl
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/perl -ws
-#
-# stackcollapse-recursive  Collapse direct recursive backtraces
-#
-# Post-process a stack list and merge direct recursive calls:
-#
-# Example input:
-#
-#     main;recursive;recursive;recursive;helper 1
-#
-# Output:
-#
-#     main;recursive;helper 1
-#
-# Copyright 2014 Gabriel Corona. All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-
-my %stacks;
-
-while (<>) {
-    chomp;
-    my ($stack_, $value) = (/^(.*)\s+?(\d+(?:\.\d*)?)$/);
-    if ($stack_) {
-        my @stack = split(/;/, $stack_);
-
-        my @result = ();
-        my $i;
-        my $last = "";
-        for ($i = 0; $i != @stack; ++$i) {
-            if (!($stack[$i] eq $last)) {
-                $result[@result] = $stack[$i];
-                $last = $stack[$i];
-            }
-        }
-
-        $stacks{join(";", @result)} += $value;
-    }
-}
-
-foreach my $k (sort {$a cmp $b} keys %stacks) {
-    print "$k $stacks{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-sample.awk b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-sample.awk
deleted file mode 100644
index bafc4af34..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-sample.awk
+++ /dev/null
@@ -1,231 +0,0 @@
-#!/usr/bin/awk -f
-#
-# Uses MacOS' /usr/bin/sample to generate a flamegraph of a process
-#
-# Usage:
-#
-# sudo sample [pid] -file /dev/stdout | stackcollapse-sample.awk | flamegraph.pl
-#
-# Options:
-#
-# The output will show the name of the library/framework at the call-site
-# with the form AppKit`NSApplication or libsystem`start_wqthread.
-#
-# If showing the framework or library name is not required, pass
-# MODULES=0 as an argument of the sample program.
-#
-# The generated SVG will be written to the output stream, and can be piped
-# into flamegraph.pl directly, or written to a file for conversion later.
-#
-# ---
-#
-# Copyright (c) 2017, Apple Inc.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-
-BEGIN {
-
-  # Command line options
-  MODULES = 1       # Allows the user to enable/disable printing of modules.
-
-  # Internal variables
-  _FOUND_STACK = 0  # Found the stack traces in the output.
-  _LEVEL = -1       # The current level of indentation we are running.
-
-  # The set of symbols to ignore for 'waiting' threads, for ease of use.
-  # This will hide waiting threads from the view, making it easier to
-  # see what is actually running in the sample. These may be adjusted
-  # as necessary or appended to if other symbols need to be filtered out.
-
-  _IGNORE["libsystem_kernel`__psynch_cvwait"] = 1
-  _IGNORE["libsystem_kernel`__select"] = 1
-  _IGNORE["libsystem_kernel`__semwait_signal"] = 1
-  _IGNORE["libsystem_kernel`__ulock_wait"] = 1
-  _IGNORE["libsystem_kernel`__wait4"] = 1
-  _IGNORE["libsystem_kernel`__workq_kernreturn"] = 1
-  _IGNORE["libsystem_kernel`kevent"] = 1
-  _IGNORE["libsystem_kernel`mach_msg_trap"] = 1
-  _IGNORE["libsystem_kernel`read"] = 1
-  _IGNORE["libsystem_kernel`semaphore_wait_trap"] = 1
-
-  # The same set of symbols as above, without the module name.
-  _IGNORE["__psynch_cvwait"] = 1
-  _IGNORE["__select"] = 1
-  _IGNORE["__semwait_signal"] = 1
-  _IGNORE["__ulock_wait"] = 1
-  _IGNORE["__wait4"] = 1
-  _IGNORE["__workq_kernreturn"] = 1
-  _IGNORE["kevent"] = 1
-  _IGNORE["mach_msg_trap"] = 1
-  _IGNORE["read"] = 1
-  _IGNORE["semaphore_wait_trap"] = 1
-
-}
-
-# This is the first line in the /usr/bin/sample output that indicates the
-# samples follow subsequently. Until we see this line, the rest is ignored.
-
-/^Call graph/ {
-  _FOUND_STACK = 1
-}
-
-# This is found when we have reached the end of the stack output.
-# Identified by the string "Total number in stack (...)".
-
-/^Total number/ {
-  _FOUND_STACK = 0
-  printStack(_NEST,0)
-}
-
-# Prints the stack from FROM to TO (where FROM > TO)
-# Called when indenting back from a previous level, or at the end
-# of processing to flush the last recorded sample
-
-function printStack(FROM,TO) {
-
-  # We ignore certain blocking wait states, in the absence of being
-  # able to filter these threads from collection, otherwise
-  # we'll end up with many threads of equal length that represent
-  # the total time the sample was collected.
-  #
-  # Note that we need to collect the information to ensure that the
-  # timekeeping for the parental functions is appropriately adjusted
-  # so we just avoid printing it out when that occurs.
-  _PRINT_IT = !_IGNORE[_NAMES[FROM]]
-
-  # We run through all the names, from the root to the leaf, so that
-  # we generate a line that flamegraph.pl will like, of the form:
-  # Thread1234;example`main;example`otherFn 1234
-
-  for(l = FROM; l>=TO; l--) {
-    if (_PRINT_IT) {
-      printf("%s", _NAMES[0])
-      for(i=1; i<=l; i++) {
-        printf(";%s", _NAMES[i])
-      }
-      print " " _TIMES[l]
-    }
-
-    # We clean up our current state to avoid bugs.
-    delete _NAMES[l]
-    delete _TIMES[l]
-  }
-}
-
-# This is where we process each line, of the form:
-#  5130 Thread_8749954
-#    + 5130 start_wqthread  (in libsystem_pthread.dylib) ...
-#    +   4282 _pthread_wqthread  (in libsystem_pthread.dylib) ...
-#    +   ! 4282 __doworkq_kernreturn  (in libsystem_kernel.dylib) ...
-#    +   848 _pthread_wqthread  (in libsystem_pthread.dylib) ...
-#    +     848 __doworkq_kernreturn  (in libsystem_kernel.dylib) ...
-
-_FOUND_STACK && match($0,/^    [^0-9]*[0-9]/) {
-
-  # We maintain two counters:
-  #   _LEVEL: the high water mark of the indentation level we have seen.
-  #   _NEST:  the current indentation level.
-  #
-  # We keep track of these two levels such that when the nesting level
-  # decreases, we print out the current state of where we are.
-
-  _NEST=(RLENGTH-5)/2
-  sub(/^[^0-9]*/,"") # Normalise the leading content so we start with time.
-  _TIME=$1           # The time recorded by 'sample', first integer value.
-
-  # The function name is in one or two parts, depending on what kind of
-  # function it is.
-  #
-  # If it is a standard C or C++ function, it will be of the form:
-  #  exampleFunction
-  #  Example::Function
-  #
-  # If it is an Objective-C funtion, it will be of the form:
-  #  -[NSExample function]
-  #  +[NSExample staticFunction]
-  #  -[NSExample function:withParameter]
-  #  +[NSExample staticFunction:withParameter:andAnother]
-
-  _FN1 = $2
-  _FN2 = $3
-
-  # If it is a standard C or C++ function then the following word will
-  # either be blank, or the text '(in', so we jut use the first one:
-
-  if (_FN2 == "(in" || _FN2 == "") {
-    _FN =_FN1
-  } else {
-    # Otherwise we concatenate the first two parts with .
-    _FN = _FN1 "." _FN2
-  }
-
-  # Modules are shown with '(in libfoo.dylib)' or '(in AppKit)'
-
-  _MODULE = ""
-  match($0, /\(in [^)]*\)/)
-
-  if (RSTART > 0 && MODULES) {
-
-    # Strip off the '(in ' (4 chars) and the final ')' char (1 char)
-    _MODULE = substr($0, RSTART+4, RLENGTH-5)
-
-    # Remove the .dylib function, since it adds no value.
-    gsub(/\.dylib/, "", _MODULE)
-
-    # The function name is 'module`functionName'
-    _FN = _MODULE "`" _FN
-  }
-
-  # Now we have set up the variables, we can decide how to apply it
-  # If we are descending in the nesting, we don't print anything out:
-  # a
-  # ab
-  # abc
-  #
-  # We only print out something when we go back a level, or hit the end:
-  # abcd
-  # abe < prints out the stack up until this point, i.e. abcd
-
-  # We store a pair of arrays, indexed by the nesting level:
-  #
-  #  _TIMES - a list of the time reported to that function
-  #  _NAMES - a list of the function names for each current stack trace
-
-  # If we are backtracking, we need to flush the current output.
-  if (_NEST <= _LEVEL) {
-    printStack(_LEVEL,_NEST)
-  }
-
-  # Record the name and time of the function where we are.
-  _NAMES[_NEST] = _FN
-  _TIMES[_NEST] = _TIME
-
-  # We subtract the time we took from our parent so we don't double count.
-  if (_NEST > 0) {
-    _TIMES[_NEST-1] -= _TIME
-  }
-
-  # Raise the high water mark of the level we have reached.
-  _LEVEL = _NEST
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-stap.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-stap.pl
deleted file mode 100644
index caa519ae3..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-stap.pl
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-stap.pl	collapse multiline SystemTap stacks
-#				into single lines.
-#
-# Parses a multiline stack followed by a number on a separate line, and
-# outputs a semicolon separated stack followed by a space and the number.
-# If memory addresses (+0xd) are present, they are stripped, and resulting
-# identical stacks are colased with their counts summed.
-#
-# USAGE: ./stackcollapse.pl infile > outfile
-#
-# Example input:
-#
-#  0xffffffff8103ce3b : native_safe_halt+0xb/0x10 [kernel]
-#  0xffffffff8101c6a3 : default_idle+0x53/0x1d0 [kernel]
-#  0xffffffff81013236 : cpu_idle+0xd6/0x120 [kernel]
-#  0xffffffff815bf03e : rest_init+0x72/0x74 [kernel]
-#  0xffffffff81aebbfe : start_kernel+0x3ba/0x3c5 [kernel]
-#	2404
-#
-# Example output:
-#
-#  start_kernel;rest_init;cpu_idle;default_idle;native_safe_halt 2404
-#
-# Input may contain many stacks as generated from SystemTap.
-#
-# Copyright 2011 Joyent, Inc.  All rights reserved.
-# Copyright 2011 Brendan Gregg.  All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# 16-Feb-2012	Brendan Gregg	Created this.
-
-use strict;
-
-my %collapsed;
-
-sub remember_stack {
-    my ($stack, $count) = @_;
-    $collapsed{$stack} += $count;
-}
-
-my @stack;
-
-foreach (<>) {
-    chomp;
-
-    if (m/^\s*(\d+)+$/) {
-        remember_stack(join(";", @stack), $1);
-        @stack = ();
-        next;
-    }
-
-    next if (m/^\s*$/);
-
-    my $frame = $_;
-    $frame =~ s/^\s*//;
-    $frame =~ s/\+[^+]*$//;
-    $frame =~ s/.* : //;
-    $frame = "-" if $frame eq "";
-    unshift @stack, $frame;
-}
-
-foreach my $k (sort {$a cmp $b} keys %collapsed) {
-    printf "$k $collapsed{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-vsprof.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-vsprof.pl
deleted file mode 100644
index 895686c3a..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-vsprof.pl
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-vsprof.pl
-#
-# Parses the CSV file containing a call tree from a visual studio profiler and produces an output suitable for flamegraph.pl.
-#
-# USAGE: perl stackcollapse-vsprof.pl infile > outfile
-#
-# WORKFLOW:
-#
-# This example assumes you have visual studio 2015 installed.
-#
-# 1. Profile C++ your application using visual studio
-# 2. On visual studio, choose export the call tree as csv
-# 3. Generate a flamegraph: perl stackcollapse-vsprof CallTreeSummary.csv | perl flamegraph.pl > result_vsprof.svg
-#
-# INPUT EXAMPLE :
-#
-# Level,Function Name,Inclusive Samples,Exclusive Samples,Inclusive Samples %,Exclusive Samples %,Module Name,
-# 1,"main","8,735",0,100.00,0.00,"an_executable.exe",
-# 2,"testing::UnitTest::Run","8,735",0,100.00,0.00,"an_executable.exe",
-# 3,"boost::trim_end_iter_select<std::iterator<std::val<std::types<char> > >,boost::is_classifiedF>",306,16,3.50,0.18,"an_executable.exe",
-#
-# OUTPUT EXAMPLE :
-#
-# main;testing::UnitTest::Run;boost::trim_end_iter_select<std::iterator<std::val<std::types<char>>>,boost::is_classifiedF> 306
-
-use strict;
-
-sub massage_function_names;
-sub parse_integer;
-sub print_stack_trace;
-
-# data initialization
-my @stack = ();
-my $line_number = 0;
-my $previous_samples = 0;
-
-my $num_args = $#ARGV + 1;
-if ($num_args != 1) {
-    print "$ARGV[0]\n";
-    print "Usage : stackcollapse-vsprof.pl <in.cvs> > out.txt\n";
-    exit;
-}
-
-my $input_csv_file = $ARGV[0];
-my $line_parser_rx = qr{
-  ^\s*(\d+?),            # level in the stack
-  ("[^"]+" | [^,]+),     # function name (beware of spaces)
-  ("[^"]+" | [^,]+),     # number of samples (beware of locale number formatting)
-}ox;
-
-open(my $fh, '<', $input_csv_file) or die "Can't read file '$input_csv_file' [$!]\n";
-
-while (my $current_line = <$fh>) {
-    $line_number = $line_number + 1;
-
-    # to discard first line which typically contains headers
-    next if $line_number == 1;
-    next if $current_line =~ /^\s*$/o;
-
-    ($current_line =~ $line_parser_rx) or die "Error in regular expression at line $line_number : $current_line\n";
-
-    my $level = int $1;
-    my $function = massage_function_names($2);
-    my $samples = parse_integer($3);
-    my $stack_len = @stack;
-
-    #print "[DEBUG] $line_number : $level $function $samples $stack_len\n";
-
-    next if not $level;
-    ($level <= $stack_len + 1) or die "Error in stack at line $line_number : $current_line\n";
-
-    if ($level <= $stack_len) {
-        print_stack_trace(\@stack, $previous_samples);
-        my $to_remove = $level - $stack_len - 1;
-        splice(@stack, $to_remove);
-    }
-
-    $stack_len < 1000 or die "Stack overflow at line $line_number";
-    push(@stack, $function);
-    $previous_samples = $samples;
-}
-print_stack_trace(\@stack, $previous_samples);
-
-sub massage_function_names {
-    return ($_[0] =~ s/\s*|^"|"$//gro);
-}
-
-sub parse_integer {
-    return int($_[0] =~ s/[., ]|^"|"$//gro);
-}
-
-sub print_stack_trace {
-    my ($stack_ref, $sample) = @_;
-    my $stack_trace = join(";", @$stack_ref);
-    print "$stack_trace $sample\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-vtune.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-vtune.pl
deleted file mode 100644
index d5740c122..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-vtune.pl
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse-vtune.pl
-#
-# Parses the CSV file containing a call tree from Intel VTune hotspots profiler and produces an output suitable for flamegraph.pl.
-#
-# USAGE: perl stackcollapse-vtune.pl infile > outfile
-#
-# WORKFLOW:
-#
-# This assumes you have Intel VTune installed and on path (using Command Line)
-#
-# 1. Profile C++ application tachyon_find_hotspots (example shipped with Intel VTune 2013):
-#
-#    amplxe-cl -collect hotspots -r result_vtune_tachyon -- ./tachyon_find_hotspots
-#
-# 2. Export raw VTune data to csv file:
-#    ###for Intel VTune 2013
-#    amplxe-cl -R top-down -call-stack-mode all -report-out result_vtune_tachyon.csv -filter "Function Stack" -format csv -csv-delimiter comma -r result_vtune_tachyon
-#
-#    ###for Intel VTune 2015 & 2016
-#    amplxe-cl -R top-down -call-stack-mode all -column="CPU Time:Self","Module" -report-out result_vtune_tachyon.csv -filter "Function Stack" -format csv -csv-delimiter comma -r result_vtune_tachyon
-#
-# 3. Generate a flamegraph:
-#
-#    perl stackcollapse-vtune result_vtune_tachyon.csv | perl flamegraph.pl > result_vtune_tachyon.svg
-#
-
-use strict;
-
-# data initialization
-my @stack = ();
-my $rowCounter = 0; #flag for row number
-
-my $numArgs = $#ARGV + 1;
-if ($numArgs != 1) {
-    print "$ARGV[0]\n";
-    print "Usage : stackcollapse-vtune.pl <out.cvs> > out.txt\n";
-    exit;
-}
-
-my $inputCSVFile = $ARGV[0];
-
-open(my $fh, '<', $inputCSVFile) or die "Can't read file '$inputCSVFile' [$!]\n";
-
-while (my $currLine = <$fh>) {
-    $rowCounter = $rowCounter + 1;
-    # to discard first row which typically contains headers
-    next if $rowCounter == 1;
-    chomp $currLine;
-    #VTune - sometimes the call stack information is enclosed in double quotes (?).  To remove double quotes.
-    $currLine =~ s/\"//g;
-
-    ### for Intel VTune 2013
-    #$currLine =~ /(\s*)(.*),(.*),[0-9]*\.?[0-9]+[%],([0-9]*\.?[0-9]+)/ or die "Error in regular expression on the current line\n";
-    #my $func = $3.'!'.$2;
-    #my $depth = length ($1);
-    #my $selfTime = $4*1000; # selfTime in msec
-
-    ### for Intel VTune 2015 & 2016
-    $currLine =~ /(\s*)(.*?),([0-9]*\.?[0-9]+?),(.*)/ or die "Error in regular expression on the current line $currLine\n";
-    my $func = $4 . '!' . $2;
-    my $depth = length($1);
-    my $selfTime = $3 * 1000; # selfTime in msec
-
-    my $tempString = '';
-    $stack[$depth] = $func;
-    foreach my $i (0 .. $depth - 1) {
-        $tempString = $tempString . $stack[$i] . ";";
-    }
-    $tempString = $tempString . $func . " $selfTime\n";
-
-    if ($selfTime != 0) {
-        print "$tempString";
-    }
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-xdebug.php b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-xdebug.php
deleted file mode 100644
index 6548903db..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse-xdebug.php
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/php
-#
-# Copyright 2018 Miriam Lauter (lauter.miriam@gmail.com).  All rights reserved.
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-#  (http://www.gnu.org/copyleft/gpl.html)
-#
-# 13-Apr-2018   Miriam Lauter   Created this.
-
-<?php
-ini_set('error_log', null);
-$optind = null;
-$args = getopt("htc", ["help"], $optind);
-if (isset($args['h']) || isset($args['help'])) {
-    usage();
-}
-
-function usage($exit = 0) {
-    echo <<<EOT
-stackcollapse-php.php  collapse php function traces into single lines.
-
-Parses php samples generated by xdebug with xdebug.trace_format = 1
-and outputs stacks as single lines, with methods separated by semicolons,
-and then a space and an occurrence count. For use with flamegraph.pl.
-See https://github.com/brendangregg/FlameGraph.
-
-USAGE: ./stackcollapse-php.php [OPTIONS] infile > outfile
-    -h --help    Show this message
-    -t           Weight stack counts by duration using the time index in the trace (default)
-    -c           Invocation counts only. Simply count stacks in the trace and sum duplicates, don't weight by duration.
-
-Example input:
-For more info on xdebug and generating traces see
-https://xdebug.org/docs/execution_trace.
-
-Version: 2.0.0RC4-dev
-TRACE START [2007-05-06 18:29:01]
-1    0    0    0.010870    114112    {main}    1    ../trace.php    0
-2    1    0    0.032009    114272    str_split    0    ../trace.php    8
-2    1    1    0.032073    116632
-2    2    0    0.033505    117424    ret_ord    1    ../trace.php    10
-3    3    0    0.033531    117584    ord    0    ../trace.php    5
-3    3    1    0.033551    117584
-...
-TRACE END   [2007-05-06 18:29:01]
-
-Example output:
-
-- c
-{main};str_split 1
-{main};ret_ord;ord 6
-
--t
-{main} 23381
-{main};str_split 64
-{main};ret_ord 215
-{main};ret_ord;ord 106
-
-EOT;
-
-    exit($exit);
-}
-
-function collapseStack(array $stack, string $func_name_key): string {
-    return implode(';', array_column($stack, $func_name_key));
-}
-
-function addCurrentStackToStacks(array $stack, float $dur, array &$stacks) {
-    $collapsed      = implode(';', $stack);
-    $duration       = SCALE_FACTOR * $dur;
-
-    if (array_key_exists($collapsed, $stacks)) {
-        $stacks[$collapsed] += $duration;
-    } else {
-        $stacks[$collapsed] = $duration;
-    }
-}
-
-function isEOTrace(string $l) {
-    $pattern = "/^(\\t|TRACE END)/";
-    return preg_match($pattern, $l);
-}
-
-$filename = $argv[$optind] ?? null;
-if ($filename === null) {
-    usage(1);
-}
-
-$do_time = !isset($args['c']);
-
-// First make sure our file is consistently formatted with only one \t delimiting each field
-$out = [];
-$retval = null;
-exec("sed -in 's/\t\+/\t/g' " . escapeshellarg($filename), $out, $retval);
-if ($retval !== 0) {
-    usage(1);
-}
-
-$handle = fopen($filename, 'r');
-
-if ($handle === false) {
-    echo "Unable to open $filename \n\n";
-    usage(1);
-}
-
-// Loop till we find TRACE START
-while ($l = fgets($handle)) {
-    if (strpos($l, "TRACE START") === 0) {
-        break;
-    }
-}
-
-const SCALE_FACTOR = 1000000;
-$stacks = [];
-$current_stack = [];
-$was_exit = false;
-$prev_start_time = 0;
-
-if ($do_time) {
-    // Weight counts by duration
-    // Xdebug trace time indices have 6 sigfigs of precision
-    // We have a perfect trace, but let's instead pretend that
-    // this was collected by sampling at 10^6 Hz
-    // then each millionth of a second this stack took to execute is 1 count
-    while ($l = fgets($handle)) {
-        if (isEOTrace($l)) {
-            break;
-        }
-
-        $parts = explode("\t", $l);
-        list($level, $fn_no, $is_exit, $time) = $parts;
-
-        if ($is_exit) {
-            if (empty($current_stack)) {
-                echo "[WARNING] Found function exit without corresponding entrance. Discarding line. Check your input.\n";
-                continue;
-            }
-
-            addCurrentStackToStacks($current_stack, $time - $prev_start_time, $stacks);
-            array_pop($current_stack);
-        } else {
-            $func_name = $parts[5];
-
-            if (!empty($current_stack)) {
-                addCurrentStackToStacks($current_stack, $time - $prev_start_time, $stacks);
-            }
-
-            $current_stack[] = $func_name;
-        }
-        $prev_start_time = $time;
-    }
-} else {
-    // Counts only
-    while ($l = fgets($handle)) {
-        if (isEOTrace($l)) {
-            break;
-        }
-
-        $parts = explode("\t", $l);
-        list($level, $fn_no, $is_exit) = $parts;
-
-        if ($is_exit === "1") {
-            if (!$was_exit) {
-                $collapsed = implode(";", $current_stack);
-                if (array_key_exists($collapsed, $stacks)) {
-                    $stacks[$collapsed]++;
-                } else {
-                    $stacks[$collapsed] = 1;
-                }
-            }
-
-            array_pop($current_stack);
-            $was_exit = true;
-        } else {
-            $func_name = $parts[5];
-            $current_stack[] = $func_name;
-            $was_exit = false;
-        }
-    }
-}
-
-foreach ($stacks as $stack => $count) {
-    echo "$stack $count\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse.pl b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse.pl
deleted file mode 100644
index c33335c7c..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse.pl
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/perl -w
-#
-# stackcollapse.pl	collapse multiline stacks into single lines.
-#
-# Parses a multiline stack followed by a number on a separate line, and
-# outputs a semicolon separated stack followed by a space and the number.
-# If memory addresses (+0xd) are present, they are stripped, and resulting
-# identical stacks are colased with their counts summed.
-#
-# USAGE: ./stackcollapse.pl infile > outfile
-#
-# Example input:
-#
-#  unix`i86_mwait+0xd
-#  unix`cpu_idle_mwait+0xf1
-#  unix`idle+0x114
-#  unix`thread_start+0x8
-#  1641
-#
-# Example output:
-#
-#  unix`thread_start;unix`idle;unix`cpu_idle_mwait;unix`i86_mwait 1641
-#
-# Input may contain many stacks, and can be generated using DTrace.  The
-# first few lines of input are skipped (see $headerlines).
-#
-# Copyright 2011 Joyent, Inc.  All rights reserved.
-# Copyright 2011 Brendan Gregg.  All rights reserved.
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at docs/cddl1.txt or
-# http://opensource.org/licenses/CDDL-1.0.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at docs/cddl1.txt.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# 14-Aug-2011	Brendan Gregg	Created this.
-
-use strict;
-
-my $headerlines = 3;   # number of input lines to skip
-my $includeoffset = 0; # include function offset (except leafs)
-my %collapsed;
-
-sub remember_stack {
-    my ($stack, $count) = @_;
-    $collapsed{$stack} += $count;
-}
-
-my $nr = 0;
-my @stack;
-
-foreach (<>) {
-    next if $nr++ < $headerlines;
-    chomp;
-
-    if (m/^\s*(\d+)+$/) {
-        my $count = $1;
-        my $joined = join(";", @stack);
-
-        # trim leaf offset if these were retained:
-        $joined =~ s/\+[^+]*$// if $includeoffset;
-
-        remember_stack($joined, $count);
-        @stack = ();
-        next;
-    }
-
-    next if (m/^\s*$/);
-
-    my $frame = $_;
-    $frame =~ s/^\s*//;
-    $frame =~ s/\+[^+]*$// unless $includeoffset;
-
-    # Remove arguments from C++ function names:
-    $frame =~ s/(::.*)[(<].*/$1/;
-
-    $frame = "-" if $frame eq "";
-
-    my @inline;
-    for (split /\->/, $frame) {
-        my $func = $_;
-
-        # Strip out L and ; included in java stacks
-        $func =~ tr/\;/:/;
-        $func =~ s/^L//;
-        $func .= "_[i]" if scalar(@inline) > 0; #inlined
-
-        push @inline, $func;
-    }
-
-    unshift @stack, @inline;
-}
-
-foreach my $k (sort {$a cmp $b} keys %collapsed) {
-    print "$k $collapsed{$k}\n";
-}
diff --git a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse.py b/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse.py
deleted file mode 100644
index e3d54111f..000000000
--- a/streampark-console/streampark-console-service/src/main/assembly/bin/flame-graph/stackcollapse.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import argparse
-import json
-
-parser = argparse.ArgumentParser(description = 'Collapse stack trace logs to FlameGraph input file.')
-parser.add_argument("--input", "-i", type=str, required=True, help="Input stack trace file")
-
-args = parser.parse_args()
-inputFile = args.input
-
-with open(inputFile) as f:
-    stacktraceDict = {}
-
-    for line in f.readlines():
-        stacktraceLog = json.loads(line)
-
-        assert 'stacktrace' in stacktraceLog, "Malformated json. 'stacktrace' key doesn't exist."
-        stacktrace = stacktraceLog['stacktrace']
-
-        if len(stacktrace) == 0:
-            continue
-
-        assert 'count' in stacktraceLog, "Malformated json. 'count' key doesn't exist."
-        count = stacktraceLog['count']
-
-        key = ';'.join(list(reversed(stacktrace)))
-        if key in stacktraceDict:
-            stacktraceDict[key] += count
-        else:
-            stacktraceDict[key] = count
-
-    for stacktraceItem in stacktraceDict:
-        print("%s %i" % (stacktraceItem, stacktraceDict[stacktraceItem]))
diff --git a/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql b/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql
index c248423dc..0fb2bef1a 100644
--- a/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql
+++ b/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql
@@ -30,7 +30,7 @@ insert into `t_team` values (100000, 'default', null, now(), now());
 -- ----------------------------
 -- Records of t_flink_app
 -- ----------------------------
-insert into `t_flink_app` values (100000, 100000, 2, 4, null, null, 'Flink SQL Demo', null, null, null, null, null, null , null, 100000, null, 1, null, null, null, null, null, null, null, 0, 0, null, null, null, null, null, null, 'Flink SQL Demo', 0, null, 0, null, null, null, null, null, null, 0, 0, now(), now(), null, 1, 1, null, null, null, null, null, null, 0, null, null, null, 'streampark,test');
+insert into `t_flink_app` values (100000, 100000, 2, 4, null, null, 'Flink SQL Demo', null, null, null, null, null, null , null, 100000, null, 1, null, null, null, null, null, null, null, 0, 0, null, null, null, null, null, null, 'Flink SQL Demo', 0, null, null, null, null, null, null, null, 0, 0, now(), now(), null, 1, 1, null, null, null, null, null, null, 0, null, null, null, 'streampark,test');
 
 -- ----------------------------
 -- Records of t_flink_effective
@@ -81,43 +81,42 @@ insert into `t_menu` values (100029, 100015, 'savepoint delete', null, null, 'sa
 insert into `t_menu` values (100030, 100015, 'backup rollback', null, null, 'backup:rollback', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100031, 100015, 'backup delete', null, null, 'backup:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100032, 100015, 'conf delete', null, null, 'conf:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100033, 100015, 'flame Graph', null, null, 'app:flameGraph', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100034, 100013, 'menu.setting', '/flink/setting', 'flink/setting/View', null, 'setting', '0', 1, 5, now(), now());
-insert into `t_menu` values (100035, 100034, 'setting update', null, null, 'setting:update', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100036, 100014, 'edit', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', 0, null, now(), now());
-insert into `t_menu` values (100037, 100015, 'delete', null, null, 'app:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100038, 100000, 'menu.tokenManagement', '/system/token', 'system/token/Token', null, 'lock', '0', 1, 1, now(), now());
-insert into `t_menu` values (100039, 100038, 'add', null, null, 'token:add', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100040, 100038, 'delete', null, null, 'token:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100041, 100034, 'add cluster', '/flink/setting/add_cluster', 'flink/setting/AddCluster', 'cluster:create', '', '0', 0, null, now(), now());
-insert into `t_menu` values (100042, 100034, 'edit cluster', '/flink/setting/edit_cluster', 'flink/setting/EditCluster', 'cluster:update', '', '0', 0, null, now(), now());
-insert into `t_menu` values (100043, 100015, 'copy', null, null, 'app:copy', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100044, 100000, 'menu.teamManagement', '/system/team', 'system/team/Team', null, 'team', '0', 1, 2, now(), now());
-insert into `t_menu` values (100045, 100044, 'add', null, null, 'team:add', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100046, 100044, 'update', null, null, 'team:update', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100047, 100044, 'delete', null, null, 'team:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100048, 100000, 'menu.memberManagement', '/system/member', 'system/member/Member', null, 'usergroup-add', '0', 1, 2, now(), now());
-insert into `t_menu` values (100049, 100048, 'add', null, null, 'member:add', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100050, 100048, 'update', null, null, 'member:update', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100051, 100048, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100052, 100048, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100053, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100054, 100013, 'menu.variable', '/flink/variable', 'flink/variable/View', null, 'code', '0', 1, 3, now(), now());
-insert into `t_menu` values (100055, 100054, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100056, 100054, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100057, 100054, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100058, 100054, 'depend apps', '/flink/variable/depend_apps', 'flink/variable/DependApps', 'variable:depend_apps', '', '0', 0, NULL, now(), now());
-insert into `t_menu` values (100059, 100054, 'show original', NULL, NULL, 'variable:show_original', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100060, 100001, 'view', null, null, 'user:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100061, 100038, 'view', null, null, 'token:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100062, 100002, 'view', null, null, 'role:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100063, 100044, 'view', null, null, 'team:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100064, 100048, 'view', null, null, 'member:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100066, 100014, 'view', null, null, 'project:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100067, 100015, 'view', null, null, 'app:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100068, 100054, 'view', NULL, NULL, 'variable:view', NULL, '1', 1, null, now(), now());
-insert into `t_menu` values (100069, 100034, 'view', null, null, 'setting:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100070, 100054, 'depend view', null, null, 'variable:depend_apps', null, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100033, 100013, 'menu.setting', '/flink/setting', 'flink/setting/View', null, 'setting', '0', 1, 5, now(), now());
+insert into `t_menu` values (100034, 100033, 'setting update', null, null, 'setting:update', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100035, 100014, 'edit', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', 0, null, now(), now());
+insert into `t_menu` values (100036, 100015, 'delete', null, null, 'app:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100037, 100000, 'menu.tokenManagement', '/system/token', 'system/token/Token', null, 'lock', '0', 1, 1, now(), now());
+insert into `t_menu` values (100038, 100037, 'add', null, null, 'token:add', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100039, 100037, 'delete', null, null, 'token:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100040, 100033, 'add cluster', '/flink/setting/add_cluster', 'flink/setting/AddCluster', 'cluster:create', '', '0', 0, null, now(), now());
+insert into `t_menu` values (100041, 100033, 'edit cluster', '/flink/setting/edit_cluster', 'flink/setting/EditCluster', 'cluster:update', '', '0', 0, null, now(), now());
+insert into `t_menu` values (100042, 100015, 'copy', null, null, 'app:copy', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100043, 100000, 'menu.teamManagement', '/system/team', 'system/team/Team', null, 'team', '0', 1, 2, now(), now());
+insert into `t_menu` values (100044, 100043, 'add', null, null, 'team:add', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100045, 100043, 'update', null, null, 'team:update', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100046, 100043, 'delete', null, null, 'team:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100047, 100000, 'menu.memberManagement', '/system/member', 'system/member/Member', null, 'usergroup-add', '0', 1, 2, now(), now());
+insert into `t_menu` values (100048, 100047, 'add', null, null, 'member:add', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100049, 100047, 'update', null, null, 'member:update', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100050, 100047, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100051, 100047, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100052, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100053, 100013, 'menu.variable', '/flink/variable', 'flink/variable/View', null, 'code', '0', 1, 3, now(), now());
+insert into `t_menu` values (100054, 100053, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100055, 100053, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100056, 100053, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100057, 100053, 'depend apps', '/flink/variable/depend_apps', 'flink/variable/DependApps', 'variable:depend_apps', '', '0', 0, NULL, now(), now());
+insert into `t_menu` values (100058, 100053, 'show original', NULL, NULL, 'variable:show_original', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100059, 100001, 'view', null, null, 'user:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100060, 100037, 'view', null, null, 'token:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100061, 100002, 'view', null, null, 'role:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100062, 100043, 'view', null, null, 'team:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100063, 100047, 'view', null, null, 'member:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100065, 100014, 'view', null, null, 'project:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100066, 100015, 'view', null, null, 'app:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100067, 100053, 'view', NULL, NULL, 'variable:view', NULL, '1', 1, null, now(), now());
+insert into `t_menu` values (100068, 100033, 'view', null, null, 'setting:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100069, 100053, 'depend view', null, null, 'variable:depend_apps', null, '1', 1, NULL, now(), now());
 
 -- ----------------------------
 -- Records of t_role
@@ -128,63 +127,59 @@ insert into `t_role` values (100002, 'team admin', 'Team Admin has all permissio
 -- ----------------------------
 -- Records of t_role_menu
 -- ----------------------------
-insert into `t_role_menu` values (100041, 100001, 100014);
-insert into `t_role_menu` values (100042, 100001, 100016);
-insert into `t_role_menu` values (100043, 100001, 100017);
-insert into `t_role_menu` values (100044, 100001, 100018);
--- insert into `t_role_menu` values (100045, 100001, 100019);
-insert into `t_role_menu` values (100046, 100001, 100020);
-insert into `t_role_menu` values (100047, 100001, 100021);
-insert into `t_role_menu` values (100048, 100001, 100022);
-insert into `t_role_menu` values (100049, 100001, 100025);
-insert into `t_role_menu` values (100050, 100001, 100026);
-insert into `t_role_menu` values (100051, 100001, 100027);
-insert into `t_role_menu` values (100052, 100001, 100028);
-insert into `t_role_menu` values (100053, 100001, 100029);
-insert into `t_role_menu` values (100054, 100001, 100030);
-insert into `t_role_menu` values (100055, 100001, 100031);
-insert into `t_role_menu` values (100056, 100001, 100032);
-insert into `t_role_menu` values (100057, 100001, 100033);
-insert into `t_role_menu` values (100058, 100001, 100013);
-insert into `t_role_menu` values (100059, 100001, 100015);
-insert into `t_role_menu` values (100060, 100002, 100014);
-insert into `t_role_menu` values (100061, 100002, 100016);
-insert into `t_role_menu` values (100062, 100002, 100017);
-insert into `t_role_menu` values (100063, 100002, 100018);
--- insert into `t_role_menu` values (100064, 100002, 100019);
-insert into `t_role_menu` values (100065, 100002, 100020);
-insert into `t_role_menu` values (100066, 100002, 100021);
-insert into `t_role_menu` values (100067, 100002, 100022);
-insert into `t_role_menu` values (100068, 100002, 100025);
-insert into `t_role_menu` values (100069, 100002, 100026);
-insert into `t_role_menu` values (100070, 100002, 100027);
-insert into `t_role_menu` values (100071, 100002, 100028);
-insert into `t_role_menu` values (100072, 100002, 100029);
-insert into `t_role_menu` values (100073, 100002, 100030);
-insert into `t_role_menu` values (100074, 100002, 100031);
-insert into `t_role_menu` values (100075, 100002, 100032);
-insert into `t_role_menu` values (100076, 100002, 100033);
-insert into `t_role_menu` values (100077, 100002, 100013);
-insert into `t_role_menu` values (100079, 100002, 100015);
-insert into `t_role_menu` values (100080, 100002, 100000);
-insert into `t_role_menu` values (100081, 100002, 100037);
-insert into `t_role_menu` values (100082, 100002, 100048);
-insert into `t_role_menu` values (100083, 100002, 100049);
-insert into `t_role_menu` values (100084, 100002, 100050);
-insert into `t_role_menu` values (100085, 100002, 100051);
-insert into `t_role_menu` values (100086, 100002, 100052);
-insert into `t_role_menu` values (100087, 100002, 100053);
-insert into `t_role_menu` values (100088, 100002, 100054);
-insert into `t_role_menu` values (100089, 100002, 100055);
-insert into `t_role_menu` values (100090, 100002, 100056);
-insert into `t_role_menu` values (100091, 100002, 100057);
-insert into `t_role_menu` values (100092, 100001, 100066);
-insert into `t_role_menu` values (100093, 100002, 100066);
-insert into `t_role_menu` values (100094, 100001, 100067);
-insert into `t_role_menu` values (100095, 100002, 100067);
-insert into `t_role_menu` values (100096, 100002, 100064);
-insert into `t_role_menu` values (100097, 100002, 100060);
-insert into `t_role_menu` values (100098, 100002, 100068);
+insert into `t_role_menu` values (100001, 100001, 100014);
+insert into `t_role_menu` values (100002, 100001, 100016);
+insert into `t_role_menu` values (100003, 100001, 100017);
+insert into `t_role_menu` values (100004, 100001, 100018);
+insert into `t_role_menu` values (100005, 100001, 100020);
+insert into `t_role_menu` values (100006, 100001, 100021);
+insert into `t_role_menu` values (100007, 100001, 100022);
+insert into `t_role_menu` values (100008, 100001, 100025);
+insert into `t_role_menu` values (100009, 100001, 100026);
+insert into `t_role_menu` values (100010, 100001, 100027);
+insert into `t_role_menu` values (100011, 100001, 100028);
+insert into `t_role_menu` values (100012, 100001, 100029);
+insert into `t_role_menu` values (100013, 100001, 100030);
+insert into `t_role_menu` values (100014, 100001, 100031);
+insert into `t_role_menu` values (100015, 100001, 100032);
+insert into `t_role_menu` values (100016, 100001, 100013);
+insert into `t_role_menu` values (100017, 100001, 100015);
+insert into `t_role_menu` values (100018, 100002, 100014);
+insert into `t_role_menu` values (100019, 100002, 100016);
+insert into `t_role_menu` values (100020, 100002, 100017);
+insert into `t_role_menu` values (100021, 100002, 100018);
+insert into `t_role_menu` values (100022, 100002, 100020);
+insert into `t_role_menu` values (100023, 100002, 100021);
+insert into `t_role_menu` values (100024, 100002, 100022);
+insert into `t_role_menu` values (100025, 100002, 100025);
+insert into `t_role_menu` values (100026, 100002, 100026);
+insert into `t_role_menu` values (100027, 100002, 100027);
+insert into `t_role_menu` values (100028, 100002, 100028);
+insert into `t_role_menu` values (100029, 100002, 100029);
+insert into `t_role_menu` values (100030, 100002, 100030);
+insert into `t_role_menu` values (100031, 100002, 100031);
+insert into `t_role_menu` values (100032, 100002, 100032);
+insert into `t_role_menu` values (100033, 100002, 100013);
+insert into `t_role_menu` values (100034, 100002, 100015);
+insert into `t_role_menu` values (100035, 100002, 100000);
+insert into `t_role_menu` values (100036, 100002, 100036);
+insert into `t_role_menu` values (100037, 100002, 100047);
+insert into `t_role_menu` values (100038, 100002, 100048);
+insert into `t_role_menu` values (100039, 100002, 100049);
+insert into `t_role_menu` values (100040, 100002, 100050);
+insert into `t_role_menu` values (100041, 100002, 100051);
+insert into `t_role_menu` values (100042, 100002, 100052);
+insert into `t_role_menu` values (100043, 100002, 100053);
+insert into `t_role_menu` values (100044, 100002, 100054);
+insert into `t_role_menu` values (100045, 100002, 100055);
+insert into `t_role_menu` values (100046, 100002, 100056);
+insert into `t_role_menu` values (100047, 100001, 100065);
+insert into `t_role_menu` values (100048, 100002, 100065);
+insert into `t_role_menu` values (100049, 100001, 100066);
+insert into `t_role_menu` values (100050, 100002, 100066);
+insert into `t_role_menu` values (100051, 100002, 100063);
+insert into `t_role_menu` values (100052, 100002, 100059);
+insert into `t_role_menu` values (100053, 100002, 100067);
 
 -- ----------------------------
 -- Records of t_setting
diff --git a/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql b/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql
index 404a396a4..0b5325efc 100644
--- a/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql
+++ b/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql
@@ -25,7 +25,7 @@ insert into "public"."t_team" values (100000, 'default', null, now(), now());
 -- ----------------------------
 -- Records of t_flink_app
 -- ----------------------------
-insert into "public"."t_flink_app" values (100000, 100000, 2, 4, null, null, 'Flink SQL Demo', null, null, null, null, null, null , null, 100000, null, 1, null, null, null, null, null, null, null, 0, 0, null, null, null, null, null, null, 'Flink SQL Demo', 0, null, false, null, null, null, null, null, null, 0, 0, now(), now(), null, 1, true, null, null, null, null, null, null, false, null, null, null, 'streampark,test');
+insert into "public"."t_flink_app" values (100000, 100000, 2, 4, null, null, 'Flink SQL Demo', null, null, null, null, null , null, 100000, null, 1, null, null, null, null, null, null, null, 0, 0, null, null, null, null, null, null, 'Flink SQL Demo', 0, null, false, null, null, null, null, null, null, 0, 0, now(), now(), null, 1, true, null, null, null, null, null, null, false, null, null, null, 'streampark,test');
 
 -- ----------------------------
 -- Records of t_flink_effective
@@ -77,43 +77,42 @@ insert into "public"."t_menu" values (100029, 100015, 'savepoint delete', null,
 insert into "public"."t_menu" values (100030, 100015, 'backup rollback', null, null, 'backup:rollback', null, '1', '1', null, now(), now());
 insert into "public"."t_menu" values (100031, 100015, 'backup delete', null, null, 'backup:delete', null, '1', '1', null, now(), now());
 insert into "public"."t_menu" values (100032, 100015, 'conf delete', null, null, 'conf:delete', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100033, 100015, 'flame Graph', null, null, 'app:flameGraph', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100034, 100013, 'menu.setting', '/flink/setting', 'flink/setting/View', null, 'setting', '0', '1', 5, now(), now());
-insert into "public"."t_menu" values (100035, 100034, 'setting update', null, null, 'setting:update', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100036, 100014, 'edit', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', '0', null, now(), now());
-insert into "public"."t_menu" values (100037, 100015, 'delete', null, null, 'app:delete', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100038, 100000, 'menu.tokenManagement', '/system/token', 'system/token/Token', null, 'lock', '0', '1', 1, now(), now());
-insert into "public"."t_menu" values (100039, 100038, 'add', null, null, 'token:add', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100040, 100038, 'delete', null, null, 'token:delete', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100041, 100034, 'add cluster', '/flink/setting/add_cluster', 'flink/setting/AddCluster', 'cluster:create', '', '0', '0', null, now(), now());
-insert into "public"."t_menu" values (100042, 100034, 'edit cluster', '/flink/setting/edit_cluster', 'flink/setting/EditCluster', 'cluster:update', '', '0', '0', null, now(), now());
-insert into "public"."t_menu" values (100043, 100015, 'copy', null, null, 'app:copy', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100044, 100000, 'menu.teamManagement', '/system/team', 'system/team/Team', null, 'team', '0', '1', 2, now(), now());
-insert into "public"."t_menu" values (100045, 100044, 'add', null, null, 'team:add', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100046, 100044, 'update', null, null, 'team:update', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100047, 100044, 'delete', null, null, 'team:delete', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100048, 100000, 'menu.memberManagement', '/system/member', 'system/member/Member', null, 'usergroup-add', '0', '1', 2, now(), now());
-insert into "public"."t_menu" values (100049, 100048, 'add', null, null, 'member:add', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100050, 100048, 'update', null, null, 'member:update', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100051, 100048, 'delete', null, null, 'member:delete', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100052, 100048, 'role view', null, null, 'role:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100053, 100001, 'types', null, null, 'user:types', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100054, 100013, 'menu.variable', '/flink/variable', 'flink/variable/View', null, 'code', '0', '1', 3, now(), now());
-insert into "public"."t_menu" values (100055, 100054, 'add', NULL, NULL, 'variable:add', NULL, '1', '1', NULL, now(), now());
-insert into "public"."t_menu" values (100056, 100054, 'update', NULL, NULL, 'variable:update', NULL, '1', '1', NULL, now(), now());
-insert into "public"."t_menu" values (100057, 100054, 'delete', NULL, NULL, 'variable:delete', NULL, '1', '1', NULL, now(), now());
-insert into "public"."t_menu" values (100058, 100054, 'depend apps', '/flink/variable/depend_apps', 'flink/variable/DependApps', 'variable:depend_apps', '', '0', '0', NULL, now(), now());
-insert into "public"."t_menu" values (100059, 100054, 'show original', NULL, NULL, 'variable:show_original', NULL, '1', '1', NULL, now(), now());
-insert into "public"."t_menu" values (100060, 100001, 'view', null, null, 'user:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100061, 100038, 'view', null, null, 'token:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100062, 100002, 'view', null, null, 'role:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100063, 100044, 'view', null, null, 'team:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100064, 100048, 'view', null, null, 'member:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100066, 100014, 'view', null, null, 'project:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100067, 100015, 'view', null, null, 'app:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100068, 100054, 'view', NULL, NULL, 'variable:view', NULL, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100069, 100034, 'view', null, null, 'setting:view', null, '1', '1', null, now(), now());
-insert into "public"."t_menu" values (100070, 100054, 'depend view', null, null, 'variable:depend_apps', null, '1', '1', NULL, now(), now());
+insert into "public"."t_menu" values (100033, 100013, 'menu.setting', '/flink/setting', 'flink/setting/View', null, 'setting', '0', '1', 5, now(), now());
+insert into "public"."t_menu" values (100034, 100033, 'setting update', null, null, 'setting:update', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100035, 100014, 'edit', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', '0', null, now(), now());
+insert into "public"."t_menu" values (100036, 100015, 'delete', null, null, 'app:delete', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100037, 100000, 'menu.tokenManagement', '/system/token', 'system/token/Token', null, 'lock', '0', '1', 1, now(), now());
+insert into "public"."t_menu" values (100038, 100037, 'add', null, null, 'token:add', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100039, 100037, 'delete', null, null, 'token:delete', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100040, 100033, 'add cluster', '/flink/setting/add_cluster', 'flink/setting/AddCluster', 'cluster:create', '', '0', '0', null, now(), now());
+insert into "public"."t_menu" values (100041, 100033, 'edit cluster', '/flink/setting/edit_cluster', 'flink/setting/EditCluster', 'cluster:update', '', '0', '0', null, now(), now());
+insert into "public"."t_menu" values (100042, 100015, 'copy', null, null, 'app:copy', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100043, 100000, 'menu.teamManagement', '/system/team', 'system/team/Team', null, 'team', '0', '1', 2, now(), now());
+insert into "public"."t_menu" values (100044, 100043, 'add', null, null, 'team:add', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100045, 100043, 'update', null, null, 'team:update', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100046, 100043, 'delete', null, null, 'team:delete', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100047, 100000, 'menu.memberManagement', '/system/member', 'system/member/Member', null, 'usergroup-add', '0', '1', 2, now(), now());
+insert into "public"."t_menu" values (100048, 100047, 'add', null, null, 'member:add', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100049, 100047, 'update', null, null, 'member:update', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100050, 100047, 'delete', null, null, 'member:delete', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100051, 100047, 'role view', null, null, 'role:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100052, 100001, 'types', null, null, 'user:types', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100053, 100013, 'menu.variable', '/flink/variable', 'flink/variable/View', null, 'code', '0', '1', 3, now(), now());
+insert into "public"."t_menu" values (100054, 100053, 'add', NULL, NULL, 'variable:add', NULL, '1', '1', NULL, now(), now());
+insert into "public"."t_menu" values (100055, 100053, 'update', NULL, NULL, 'variable:update', NULL, '1', '1', NULL, now(), now());
+insert into "public"."t_menu" values (100056, 100053, 'delete', NULL, NULL, 'variable:delete', NULL, '1', '1', NULL, now(), now());
+insert into "public"."t_menu" values (100057, 100053, 'depend apps', '/flink/variable/depend_apps', 'flink/variable/DependApps', 'variable:depend_apps', '', '0', '0', NULL, now(), now());
+insert into "public"."t_menu" values (100058, 100053, 'show original', NULL, NULL, 'variable:show_original', NULL, '1', '1', NULL, now(), now());
+insert into "public"."t_menu" values (100059, 100001, 'view', null, null, 'user:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100060, 100037, 'view', null, null, 'token:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100061, 100002, 'view', null, null, 'role:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100062, 100043, 'view', null, null, 'team:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100063, 100047, 'view', null, null, 'member:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100065, 100014, 'view', null, null, 'project:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100066, 100015, 'view', null, null, 'app:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100067, 100053, 'view', NULL, NULL, 'variable:view', NULL, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100068, 100033, 'view', null, null, 'setting:view', null, '1', '1', null, now(), now());
+insert into "public"."t_menu" values (100069, 100053, 'depend view', null, null, 'variable:depend_apps', null, '1', '1', NULL, now(), now());
 
 -- ----------------------------
 -- Records of t_role
@@ -124,63 +123,59 @@ insert into "public"."t_role" values (100002, 'team admin', 'Team Admin has all
 -- ----------------------------
 -- Records of t_role_menu
 -- ----------------------------
-insert into "public"."t_role_menu" values (100041, 100001, 100014);
-insert into "public"."t_role_menu" values (100042, 100001, 100016);
-insert into "public"."t_role_menu" values (100043, 100001, 100017);
-insert into "public"."t_role_menu" values (100044, 100001, 100018);
--- insert into "public"."t_role_menu" values (100045, 100001, 100019);
-insert into "public"."t_role_menu" values (100046, 100001, 100020);
-insert into "public"."t_role_menu" values (100047, 100001, 100021);
-insert into "public"."t_role_menu" values (100048, 100001, 100022);
-insert into "public"."t_role_menu" values (100049, 100001, 100025);
-insert into "public"."t_role_menu" values (100050, 100001, 100026);
-insert into "public"."t_role_menu" values (100051, 100001, 100027);
-insert into "public"."t_role_menu" values (100052, 100001, 100028);
-insert into "public"."t_role_menu" values (100053, 100001, 100029);
-insert into "public"."t_role_menu" values (100054, 100001, 100030);
-insert into "public"."t_role_menu" values (100055, 100001, 100031);
-insert into "public"."t_role_menu" values (100056, 100001, 100032);
-insert into "public"."t_role_menu" values (100057, 100001, 100033);
-insert into "public"."t_role_menu" values (100058, 100001, 100013);
-insert into "public"."t_role_menu" values (100059, 100001, 100015);
-insert into "public"."t_role_menu" values (100060, 100002, 100014);
-insert into "public"."t_role_menu" values (100061, 100002, 100016);
-insert into "public"."t_role_menu" values (100062, 100002, 100017);
-insert into "public"."t_role_menu" values (100063, 100002, 100018);
--- insert into "public"."t_role_menu" values (100064, 100002, 100019);
-insert into "public"."t_role_menu" values (100065, 100002, 100020);
-insert into "public"."t_role_menu" values (100066, 100002, 100021);
-insert into "public"."t_role_menu" values (100067, 100002, 100022);
-insert into "public"."t_role_menu" values (100068, 100002, 100025);
-insert into "public"."t_role_menu" values (100069, 100002, 100026);
-insert into "public"."t_role_menu" values (100070, 100002, 100027);
-insert into "public"."t_role_menu" values (100071, 100002, 100028);
-insert into "public"."t_role_menu" values (100072, 100002, 100029);
-insert into "public"."t_role_menu" values (100073, 100002, 100030);
-insert into "public"."t_role_menu" values (100074, 100002, 100031);
-insert into "public"."t_role_menu" values (100075, 100002, 100032);
-insert into "public"."t_role_menu" values (100076, 100002, 100033);
-insert into "public"."t_role_menu" values (100077, 100002, 100013);
-insert into "public"."t_role_menu" values (100079, 100002, 100015);
-insert into "public"."t_role_menu" values (100080, 100002, 100000);
-insert into "public"."t_role_menu" values (100081, 100002, 100037);
-insert into "public"."t_role_menu" values (100082, 100002, 100048);
-insert into "public"."t_role_menu" values (100083, 100002, 100049);
-insert into "public"."t_role_menu" values (100084, 100002, 100050);
-insert into "public"."t_role_menu" values (100085, 100002, 100051);
-insert into "public"."t_role_menu" values (100086, 100002, 100052);
-insert into "public"."t_role_menu" values (100087, 100002, 100053);
-insert into "public"."t_role_menu" values (100088, 100002, 100054);
-insert into "public"."t_role_menu" values (100089, 100002, 100055);
-insert into "public"."t_role_menu" values (100090, 100002, 100056);
-insert into "public"."t_role_menu" values (100091, 100002, 100057);
-insert into "public"."t_role_menu" values (100092, 100001, 100066);
-insert into "public"."t_role_menu" values (100093, 100002, 100066);
-insert into "public"."t_role_menu" values (100094, 100001, 100067);
-insert into "public"."t_role_menu" values (100095, 100002, 100067);
-insert into "public"."t_role_menu" values (100096, 100002, 100064);
-insert into "public"."t_role_menu" values (100097, 100002, 100060);
-insert into "public"."t_role_menu" values (100098, 100002, 100068);
+insert into "public"."t_role_menu" values (100001, 100001, 100014);
+insert into "public"."t_role_menu" values (100002, 100001, 100016);
+insert into "public"."t_role_menu" values (100003, 100001, 100017);
+insert into "public"."t_role_menu" values (100004, 100001, 100018);
+insert into "public"."t_role_menu" values (100005, 100001, 100020);
+insert into "public"."t_role_menu" values (100006, 100001, 100021);
+insert into "public"."t_role_menu" values (100007, 100001, 100022);
+insert into "public"."t_role_menu" values (100008, 100001, 100025);
+insert into "public"."t_role_menu" values (100009, 100001, 100026);
+insert into "public"."t_role_menu" values (100010, 100001, 100027);
+insert into "public"."t_role_menu" values (100011, 100001, 100028);
+insert into "public"."t_role_menu" values (100012, 100001, 100029);
+insert into "public"."t_role_menu" values (100013, 100001, 100030);
+insert into "public"."t_role_menu" values (100014, 100001, 100031);
+insert into "public"."t_role_menu" values (100015, 100001, 100032);
+insert into "public"."t_role_menu" values (100016, 100001, 100013);
+insert into "public"."t_role_menu" values (100017, 100001, 100015);
+insert into "public"."t_role_menu" values (100018, 100002, 100014);
+insert into "public"."t_role_menu" values (100019, 100002, 100016);
+insert into "public"."t_role_menu" values (100020, 100002, 100017);
+insert into "public"."t_role_menu" values (100021, 100002, 100018);
+insert into "public"."t_role_menu" values (100022, 100002, 100020);
+insert into "public"."t_role_menu" values (100023, 100002, 100021);
+insert into "public"."t_role_menu" values (100024, 100002, 100022);
+insert into "public"."t_role_menu" values (100025, 100002, 100025);
+insert into "public"."t_role_menu" values (100026, 100002, 100026);
+insert into "public"."t_role_menu" values (100027, 100002, 100027);
+insert into "public"."t_role_menu" values (100028, 100002, 100028);
+insert into "public"."t_role_menu" values (100029, 100002, 100029);
+insert into "public"."t_role_menu" values (100030, 100002, 100030);
+insert into "public"."t_role_menu" values (100031, 100002, 100031);
+insert into "public"."t_role_menu" values (100032, 100002, 100032);
+insert into "public"."t_role_menu" values (100033, 100002, 100013);
+insert into "public"."t_role_menu" values (100034, 100002, 100015);
+insert into "public"."t_role_menu" values (100035, 100002, 100000);
+insert into "public"."t_role_menu" values (100036, 100002, 100036);
+insert into "public"."t_role_menu" values (100037, 100002, 100047);
+insert into "public"."t_role_menu" values (100038, 100002, 100048);
+insert into "public"."t_role_menu" values (100039, 100002, 100049);
+insert into "public"."t_role_menu" values (100040, 100002, 100050);
+insert into "public"."t_role_menu" values (100041, 100002, 100051);
+insert into "public"."t_role_menu" values (100042, 100002, 100052);
+insert into "public"."t_role_menu" values (100043, 100002, 100053);
+insert into "public"."t_role_menu" values (100044, 100002, 100054);
+insert into "public"."t_role_menu" values (100045, 100002, 100055);
+insert into "public"."t_role_menu" values (100046, 100002, 100056);
+insert into "public"."t_role_menu" values (100047, 100001, 100065);
+insert into "public"."t_role_menu" values (100048, 100002, 100065);
+insert into "public"."t_role_menu" values (100049, 100001, 100066);
+insert into "public"."t_role_menu" values (100050, 100002, 100066);
+insert into "public"."t_role_menu" values (100051, 100002, 100063);
+insert into "public"."t_role_menu" values (100052, 100002, 100059);
+insert into "public"."t_role_menu" values (100053, 100002, 100067);
 -- ----------------------------
 -- Records of t_setting
 -- ----------------------------
diff --git a/streampark-console/streampark-console-service/src/main/assembly/script/schema/mysql-schema.sql b/streampark-console/streampark-console-service/src/main/assembly/script/schema/mysql-schema.sql
index ef0280a48..a7d914cec 100644
--- a/streampark-console/streampark-console-service/src/main/assembly/script/schema/mysql-schema.sql
+++ b/streampark-console/streampark-console-service/src/main/assembly/script/schema/mysql-schema.sql
@@ -37,23 +37,6 @@ create table `t_app_backup` (
   primary key (`id`) using btree
 ) engine=innodb auto_increment=100000 default charset=utf8mb4 collate=utf8mb4_general_ci;
 
-
--- ----------------------------
--- table structure for t_flame_graph
--- ----------------------------
-drop table if exists `t_flame_graph`;
-create table `t_flame_graph` (
-  `id` bigint not null auto_increment,
-  `app_id` bigint default null,
-  `profiler` varchar(255) collate utf8mb4_general_ci default null,
-  `timeline` datetime default null,
-  `content` text collate utf8mb4_general_ci,
-  primary key (`id`) using btree,
-  key `inx_time` (`timeline`),
-  key `inx_appid` (`app_id`)
-) engine=innodb auto_increment=100000 default charset=utf8mb4 collate=utf8mb4_general_ci;
-
-
 -- ----------------------------
 -- Table structure for t_flink_app
 -- ----------------------------
@@ -94,7 +77,6 @@ create table `t_flink_app` (
   `description` varchar(255) collate utf8mb4_general_ci default null,
   `resolve_order` tinyint default null,
   `k8s_rest_exposed_type` tinyint default null,
-  `flame_graph` tinyint default 0,
   `jm_memory` int default null,
   `tm_memory` int default null,
   `total_task` int default null,
diff --git a/streampark-console/streampark-console-service/src/main/assembly/script/schema/pgsql-schema.sql b/streampark-console/streampark-console-service/src/main/assembly/script/schema/pgsql-schema.sql
index e6032e87b..7654c79a7 100644
--- a/streampark-console/streampark-console-service/src/main/assembly/script/schema/pgsql-schema.sql
+++ b/streampark-console/streampark-console-service/src/main/assembly/script/schema/pgsql-schema.sql
@@ -35,7 +35,6 @@ drop table if exists "public"."t_flink_effective";
 drop table if exists "public"."t_flink_config";
 drop table if exists "public"."t_flink_cluster";
 drop table if exists "public"."t_flink_app";
-drop table if exists "public"."t_flame_graph";
 drop table if exists "public"."t_app_build_pipe";
 drop table if exists "public"."t_app_backup";
 drop table if exists "public"."t_alert_config";
@@ -61,7 +60,6 @@ drop sequence if exists "public"."streampark_t_flink_effective_id_seq";
 drop sequence if exists "public"."streampark_t_flink_config_id_seq";
 drop sequence if exists "public"."streampark_t_flink_cluster_id_seq";
 drop sequence if exists "public"."streampark_t_flink_app_id_seq";
-drop sequence if exists "public"."streampark_t_flame_graph_id_seq";
 drop sequence if exists "public"."streampark_t_app_backup_id_seq";
 drop sequence if exists "public"."streampark_t_alert_config_id_seq";
 drop sequence if exists "public"."streampark_t_access_token_id_seq";
@@ -182,29 +180,6 @@ create table "public"."t_app_build_pipe" (
 ;
 alter table "public"."t_app_build_pipe" add constraint "t_app_build_pipe_pkey" primary key ("app_id");
 
-
--- ----------------------------
--- table structure for t_flame_graph
--- ----------------------------
-create sequence "public"."streampark_t_flame_graph_id_seq"
-    increment 1 start 10000 cache 1 minvalue 10000 maxvalue 9223372036854775807;
-
-create table "public"."t_flame_graph" (
-  "id" int8 not null default nextval('streampark_t_flame_graph_id_seq'::regclass),
-  "app_id" int8,
-  "profiler" varchar(255) collate "pg_catalog"."default",
-  "timeline" timestamp(6),
-  "content" text collate "pg_catalog"."default"
-)
-;
-alter table "public"."t_flame_graph" add constraint "t_flame_graph_pkey" primary key ("id");
-create index "inx_appid" on "public"."t_flame_graph" using btree (
-  "app_id" "pg_catalog"."int8_ops" asc nulls last
-);
-create index "inx_time" on "public"."t_flame_graph" using btree (
-  "timeline" "pg_catalog"."timestamp_ops" asc nulls last
-);
-
 -- ----------------------------
 -- table structure for t_flink_app
 -- ----------------------------
@@ -247,7 +222,6 @@ create table "public"."t_flink_app" (
   "description" varchar(255) collate "pg_catalog"."default",
   "resolve_order" int2,
   "k8s_rest_exposed_type" int2,
-  "flame_graph" boolean default false,
   "jm_memory" int4,
   "tm_memory" int4,
   "total_task" int4,
diff --git a/streampark-console/streampark-console-service/src/main/assembly/script/upgrade/mysql/2.0.0.sql b/streampark-console/streampark-console-service/src/main/assembly/script/upgrade/mysql/2.0.0.sql
index d82f80bc3..735709c6a 100644
--- a/streampark-console/streampark-console-service/src/main/assembly/script/upgrade/mysql/2.0.0.sql
+++ b/streampark-console/streampark-console-service/src/main/assembly/script/upgrade/mysql/2.0.0.sql
@@ -157,43 +157,98 @@ insert into `t_menu` values (100029, 100015, 'savepoint delete', null, null, 'sa
 insert into `t_menu` values (100030, 100015, 'backup rollback', null, null, 'backup:rollback', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100031, 100015, 'backup delete', null, null, 'backup:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100032, 100015, 'conf delete', null, null, 'conf:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100033, 100015, 'flame Graph', null, null, 'app:flameGraph', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100034, 100013, 'menu.setting', '/flink/setting', 'flink/setting/View', null, 'setting', '0', 1, 5, now(), now());
-insert into `t_menu` values (100035, 100034, 'setting update', null, null, 'setting:update', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100036, 100014, 'edit', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', 0, null, now(), now());
-insert into `t_menu` values (100037, 100015, 'delete', null, null, 'app:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100038, 100000, 'menu.tokenManagement', '/system/token', 'system/token/Token', null, 'lock', '0', 1, 1, now(), now());
-insert into `t_menu` values (100039, 100038, 'add', null, null, 'token:add', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100040, 100038, 'delete', null, null, 'token:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100041, 100034, 'add cluster', '/flink/setting/add_cluster', 'flink/setting/AddCluster', 'cluster:create', '', '0', 0, null, now(), now());
-insert into `t_menu` values (100042, 100034, 'edit cluster', '/flink/setting/edit_cluster', 'flink/setting/EditCluster', 'cluster:update', '', '0', 0, null, now(), now());
-insert into `t_menu` values (100043, 100015, 'copy', null, null, 'app:copy', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100044, 100000, 'menu.teamManagement', '/system/team', 'system/team/Team', null, 'team', '0', 1, 2, now(), now());
-insert into `t_menu` values (100045, 100044, 'add', null, null, 'team:add', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100046, 100044, 'update', null, null, 'team:update', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100047, 100044, 'delete', null, null, 'team:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100048, 100000, 'menu.memberManagement', '/system/member', 'system/member/Member', null, 'usergroup-add', '0', 1, 2, now(), now());
-insert into `t_menu` values (100049, 100048, 'add', null, null, 'member:add', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100050, 100048, 'update', null, null, 'member:update', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100051, 100048, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100052, 100048, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100053, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100054, 100013, 'menu.variable', '/flink/variable', 'flink/variable/View', null, 'code', '0', 1, 3, now(), now());
-insert into `t_menu` values (100055, 100054, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100056, 100054, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100057, 100054, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100058, 100054, 'depend apps', '/flink/variable/depend_apps', 'flink/variable/DependApps', 'variable:depend_apps', '', '0', 0, NULL, now(), now());
-insert into `t_menu` values (100059, 100054, 'show original', NULL, NULL, 'variable:show_original', NULL, '1', 1, NULL, now(), now());
-insert into `t_menu` values (100060, 100001, 'view', null, null, 'user:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100061, 100038, 'view', null, null, 'token:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100062, 100002, 'view', null, null, 'role:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100063, 100044, 'view', null, null, 'team:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100064, 100048, 'view', null, null, 'member:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100066, 100014, 'view', null, null, 'project:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100067, 100015, 'view', null, null, 'app:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100068, 100054, 'view', NULL, NULL, 'variable:view', NULL, '1', 1, null, now(), now());
-insert into `t_menu` values (100069, 100034, 'view', null, null, 'setting:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100070, 100054, 'depend view', null, null, 'variable:depend_apps', null, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100033, 100013, 'menu.setting', '/flink/setting', 'flink/setting/View', null, 'setting', '0', 1, 5, now(), now());
+insert into `t_menu` values (100034, 100033, 'setting update', null, null, 'setting:update', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100035, 100014, 'edit', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', 0, null, now(), now());
+insert into `t_menu` values (100036, 100015, 'delete', null, null, 'app:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100037, 100000, 'menu.tokenManagement', '/system/token', 'system/token/Token', null, 'lock', '0', 1, 1, now(), now());
+insert into `t_menu` values (100038, 100037, 'add', null, null, 'token:add', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100039, 100037, 'delete', null, null, 'token:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100040, 100033, 'add cluster', '/flink/setting/add_cluster', 'flink/setting/AddCluster', 'cluster:create', '', '0', 0, null, now(), now());
+insert into `t_menu` values (100041, 100033, 'edit cluster', '/flink/setting/edit_cluster', 'flink/setting/EditCluster', 'cluster:update', '', '0', 0, null, now(), now());
+insert into `t_menu` values (100042, 100015, 'copy', null, null, 'app:copy', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100043, 100000, 'menu.teamManagement', '/system/team', 'system/team/Team', null, 'team', '0', 1, 2, now(), now());
+insert into `t_menu` values (100044, 100043, 'add', null, null, 'team:add', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100045, 100043, 'update', null, null, 'team:update', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100046, 100043, 'delete', null, null, 'team:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100047, 100000, 'menu.memberManagement', '/system/member', 'system/member/Member', null, 'usergroup-add', '0', 1, 2, now(), now());
+insert into `t_menu` values (100048, 100047, 'add', null, null, 'member:add', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100049, 100047, 'update', null, null, 'member:update', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100050, 100047, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100051, 100047, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100052, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100053, 100013, 'menu.variable', '/flink/variable', 'flink/variable/View', null, 'code', '0', 1, 3, now(), now());
+insert into `t_menu` values (100054, 100053, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100055, 100053, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100056, 100053, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100057, 100053, 'depend apps', '/flink/variable/depend_apps', 'flink/variable/DependApps', 'variable:depend_apps', '', '0', 0, NULL, now(), now());
+insert into `t_menu` values (100058, 100053, 'show original', NULL, NULL, 'variable:show_original', NULL, '1', 1, NULL, now(), now());
+insert into `t_menu` values (100059, 100001, 'view', null, null, 'user:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100060, 100037, 'view', null, null, 'token:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100061, 100002, 'view', null, null, 'role:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100062, 100043, 'view', null, null, 'team:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100063, 100047, 'view', null, null, 'member:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100065, 100014, 'view', null, null, 'project:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100066, 100015, 'view', null, null, 'app:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100067, 100053, 'view', NULL, NULL, 'variable:view', NULL, '1', 1, null, now(), now());
+insert into `t_menu` values (100068, 100033, 'view', null, null, 'setting:view', null, '1', 1, null, now(), now());
+insert into `t_menu` values (100069, 100053, 'depend view', null, null, 'variable:depend_apps', null, '1', 1, NULL, now(), now());
+
+-- reset t_role_menu
+delete from t_role_menu;
+insert into `t_role_menu` values (100001, 100001, 100014);
+insert into `t_role_menu` values (100002, 100001, 100016);
+insert into `t_role_menu` values (100003, 100001, 100017);
+insert into `t_role_menu` values (100004, 100001, 100018);
+insert into `t_role_menu` values (100005, 100001, 100020);
+insert into `t_role_menu` values (100006, 100001, 100021);
+insert into `t_role_menu` values (100007, 100001, 100022);
+insert into `t_role_menu` values (100008, 100001, 100025);
+insert into `t_role_menu` values (100009, 100001, 100026);
+insert into `t_role_menu` values (100010, 100001, 100027);
+insert into `t_role_menu` values (100011, 100001, 100028);
+insert into `t_role_menu` values (100012, 100001, 100029);
+insert into `t_role_menu` values (100013, 100001, 100030);
+insert into `t_role_menu` values (100014, 100001, 100031);
+insert into `t_role_menu` values (100015, 100001, 100032);
+insert into `t_role_menu` values (100016, 100001, 100013);
+insert into `t_role_menu` values (100017, 100001, 100015);
+insert into `t_role_menu` values (100018, 100002, 100014);
+insert into `t_role_menu` values (100019, 100002, 100016);
+insert into `t_role_menu` values (100020, 100002, 100017);
+insert into `t_role_menu` values (100021, 100002, 100018);
+insert into `t_role_menu` values (100022, 100002, 100020);
+insert into `t_role_menu` values (100023, 100002, 100021);
+insert into `t_role_menu` values (100024, 100002, 100022);
+insert into `t_role_menu` values (100025, 100002, 100025);
+insert into `t_role_menu` values (100026, 100002, 100026);
+insert into `t_role_menu` values (100027, 100002, 100027);
+insert into `t_role_menu` values (100028, 100002, 100028);
+insert into `t_role_menu` values (100029, 100002, 100029);
+insert into `t_role_menu` values (100030, 100002, 100030);
+insert into `t_role_menu` values (100031, 100002, 100031);
+insert into `t_role_menu` values (100032, 100002, 100032);
+insert into `t_role_menu` values (100033, 100002, 100013);
+insert into `t_role_menu` values (100034, 100002, 100015);
+insert into `t_role_menu` values (100035, 100002, 100000);
+insert into `t_role_menu` values (100036, 100002, 100036);
+insert into `t_role_menu` values (100037, 100002, 100047);
+insert into `t_role_menu` values (100038, 100002, 100048);
+insert into `t_role_menu` values (100039, 100002, 100049);
+insert into `t_role_menu` values (100040, 100002, 100050);
+insert into `t_role_menu` values (100041, 100002, 100051);
+insert into `t_role_menu` values (100042, 100002, 100052);
+insert into `t_role_menu` values (100043, 100002, 100053);
+insert into `t_role_menu` values (100044, 100002, 100054);
+insert into `t_role_menu` values (100045, 100002, 100055);
+insert into `t_role_menu` values (100046, 100002, 100056);
+insert into `t_role_menu` values (100047, 100001, 100065);
+insert into `t_role_menu` values (100048, 100002, 100065);
+insert into `t_role_menu` values (100049, 100001, 100066);
+insert into `t_role_menu` values (100050, 100002, 100066);
+insert into `t_role_menu` values (100051, 100002, 100063);
+insert into `t_role_menu` values (100052, 100002, 100059);
+insert into `t_role_menu` values (100053, 100002, 100067);
 
 -- Add team related sql
 create table `t_team` (
@@ -222,45 +277,12 @@ add column `last_team_id` bigint default null comment 'last team id' after `user
 update `t_user` set `user_type` = 1
 where `user_id` in (select user_id from `t_user_role` where role_id = 100000);
 
-delete from t_role_menu where role_id = 100000;
 delete from t_role where role_id = 100000;
 delete from `t_user_role` where role_id = 100000;
 
 -- Add team admin
 insert into `t_role` values (100002, 'team admin', 'Team Admin has all permissions inside the team.', now(), now(), null);
 
-insert into `t_role_menu` values (100060, 100002, 100014);
-insert into `t_role_menu` values (100061, 100002, 100016);
-insert into `t_role_menu` values (100062, 100002, 100017);
-insert into `t_role_menu` values (100063, 100002, 100018);
--- insert into `t_role_menu` values (100064, 100002, 100019);
-insert into `t_role_menu` values (100065, 100002, 100020);
-insert into `t_role_menu` values (100066, 100002, 100021);
-insert into `t_role_menu` values (100067, 100002, 100022);
-insert into `t_role_menu` values (100068, 100002, 100025);
-insert into `t_role_menu` values (100069, 100002, 100026);
-insert into `t_role_menu` values (100070, 100002, 100027);
-insert into `t_role_menu` values (100071, 100002, 100028);
-insert into `t_role_menu` values (100072, 100002, 100029);
-insert into `t_role_menu` values (100073, 100002, 100030);
-insert into `t_role_menu` values (100074, 100002, 100031);
-insert into `t_role_menu` values (100075, 100002, 100032);
-insert into `t_role_menu` values (100076, 100002, 100033);
-insert into `t_role_menu` values (100077, 100002, 100013);
-insert into `t_role_menu` values (100079, 100002, 100015);
-insert into `t_role_menu` values (100080, 100002, 100000);
-insert into `t_role_menu` values (100081, 100002, 100037);
-insert into `t_role_menu` values (100082, 100002, 100048);
-insert into `t_role_menu` values (100083, 100002, 100049);
-insert into `t_role_menu` values (100084, 100002, 100050);
-insert into `t_role_menu` values (100085, 100002, 100051);
-insert into `t_role_menu` values (100086, 100002, 100052);
-insert into `t_role_menu` values (100087, 100002, 100053);
-insert into `t_role_menu` values (100088, 100002, 100054);
-insert into `t_role_menu` values (100089, 100002, 100055);
-insert into `t_role_menu` values (100090, 100002, 100056);
-insert into `t_role_menu` values (100091, 100002, 100057);
-
 -- alter t_role_user to t_member and update the schema
 alter table `t_user_role` rename `t_member`;
 
@@ -314,5 +336,8 @@ create table `t_variable` (
   unique key `un_team_vcode_inx` (`team_id`,`variable_code`) using btree
 ) engine=innodb auto_increment=100000 default charset=utf8mb4 collate=utf8mb4_general_ci;
 
+
+drop table if exists `t_flame_graph`;
+
 set foreign_key_checks = 1;
 
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
index 1fece41ce..7e84255f2 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
@@ -174,7 +174,6 @@ public class ApplicationController {
         @ApiImplicitParam(name = "id", value = "app Id", required = true, paramType = "query", dataTypeClass = Long.class),
         @ApiImplicitParam(name = "savePointed", value = "restored app from the savepoint or latest checkpoint", required = true, paramType = "query", dataTypeClass = Boolean.class, defaultValue = "false"),
         @ApiImplicitParam(name = "savePoint", value = "savepoint or checkpoint path", required = true, paramType = "query", dataTypeClass = String.class, defaultValue = ""),
-        @ApiImplicitParam(name = "flameGraph", value = "whether the flame graph support", required = true, paramType = "query", dataTypeClass = Boolean.class, defaultValue = "false"),
         @ApiImplicitParam(name = "allowNonRestored", value = "ignore savepoint then cannot be restored", required = true, paramType = "query", dataTypeClass = Boolean.class, defaultValue = "false")})
     @PostMapping(value = "start", consumes = "application/x-www-form-urlencoded")
     @RequiresPermissions("app:start")
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MetricsController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MetricsController.java
index 19873ffff..09a053705 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MetricsController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MetricsController.java
@@ -19,42 +19,24 @@ package org.apache.streampark.console.core.controller;
 
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.domain.RestResponse;
-import org.apache.streampark.console.core.entity.FlameGraph;
 import org.apache.streampark.console.core.entity.Message;
 import org.apache.streampark.console.core.enums.NoticeType;
-import org.apache.streampark.console.core.metrics.flink.JvmProfiler;
-import org.apache.streampark.console.core.service.FlameGraphService;
 import org.apache.streampark.console.core.service.MessageService;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.io.FileSystemResource;
-import org.springframework.core.io.Resource;
-import org.springframework.http.ContentDisposition;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.io.IOException;
-import java.util.Date;
-
 @Slf4j
 @Validated
 @RestController
 @RequestMapping("metrics")
 public class MetricsController {
 
-    private static final String STACKTRACE_PROFILER_NAME = "Stacktrace";
-
-    @Autowired
-    private FlameGraphService flameGraphService;
-
     @Autowired
     private MessageService messageService;
 
@@ -70,40 +52,4 @@ public class MetricsController {
         return RestResponse.success(messageService.removeById(id));
     }
 
-    @PostMapping("report")
-    public RestResponse report(@RequestBody JvmProfiler jvmProfiler) {
-        try {
-            if (jvmProfiler != null && jvmProfiler.getProfiler().equals(STACKTRACE_PROFILER_NAME)) {
-                log.info("id:{},token:{},type:{}", jvmProfiler.getId(), jvmProfiler.getToken(), jvmProfiler.getType());
-                FlameGraph flameGraph = new FlameGraph();
-                flameGraph.setAppId(jvmProfiler.getId());
-                flameGraph.setProfiler(jvmProfiler.getProfiler());
-                flameGraph.setTimeline(new Date());
-                flameGraph.setContent(jvmProfiler.getMetric());
-                flameGraphService.save(flameGraph);
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-        return RestResponse.success();
-    }
-
-    @PostMapping("flamegraph")
-    public ResponseEntity<Resource> flameGraph(FlameGraph flameGraph) throws IOException {
-        String file = flameGraphService.generateFlameGraph(flameGraph);
-        if (file != null) {
-            String contentDisposition = ContentDisposition
-                .builder("attachment")
-                .filename(file)
-                .build()
-                .toString();
-
-            return ResponseEntity.ok()
-                .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
-                .contentType(MediaType.parseMediaType("image/svg+xml"))
-                .body(new FileSystemResource(file));
-        } else {
-            return null;
-        }
-    }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
index 3c2650350..6598ac26a 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
@@ -168,7 +168,6 @@ public class Application implements Serializable {
     private Integer executionMode;
     private String dynamicProperties;
     private Integer appType;
-    private Boolean flameGraph;
 
     /**
      * determine if tracking status
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlameGraph.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlameGraph.java
deleted file mode 100644
index cc9f467c7..000000000
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlameGraph.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.console.core.entity;
-
-import org.apache.streampark.common.util.DeflaterUtils;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-@Data
-@TableName("t_flame_graph")
-@Slf4j
-public class FlameGraph {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long appId;
-
-    private String profiler;
-
-    private Date timeline;
-
-    private String content;
-
-    private transient Date end = new Date();
-
-    private transient Integer duration = 60 * 2;
-
-    private transient Integer width = 1280;
-
-    private static final Integer QUERY_DURATION = 60 * 4;
-
-    @JsonIgnore
-    public Date getStart() {
-        if (this.duration > QUERY_DURATION) {
-            throw new IllegalArgumentException(
-                "[StreamPark] flameGraph query duration cannot be greater than 4 hours");
-        }
-        Calendar cal = Calendar.getInstance();
-        cal.setTimeZone(TimeZone.getDefault());
-        cal.setTime(this.getEnd());
-        cal.add(Calendar.MINUTE, -duration);
-        return cal.getTime();
-    }
-
-    @JsonIgnore
-    public String getUnzipContent() {
-        if (this.content != null) {
-            return DeflaterUtils.unzipString(this.content);
-        }
-        return null;
-    }
-}
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/mapper/FlameGraphMapper.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/mapper/FlameGraphMapper.java
deleted file mode 100644
index 52ebcd442..000000000
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/mapper/FlameGraphMapper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.console.core.mapper;
-
-import org.apache.streampark.console.core.entity.FlameGraph;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-public interface FlameGraphMapper extends BaseMapper<FlameGraph> {
-
-}
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/FlameGraphService.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/FlameGraphService.java
deleted file mode 100644
index 1713a7fd1..000000000
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/FlameGraphService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.console.core.service;
-
-import org.apache.streampark.console.core.entity.FlameGraph;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-
-import java.io.IOException;
-import java.util.Date;
-
-public interface FlameGraphService extends IService<FlameGraph> {
-
-    String generateFlameGraph(FlameGraph flameGraph) throws IOException;
-
-    void clean(Date end);
-}
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
index b87f5a9b0..46fb5880a 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
@@ -23,7 +23,6 @@ import static org.apache.streampark.console.core.task.K8sFlinkTrackMonitorWrappe
 
 import org.apache.streampark.common.conf.ConfigConst;
 import org.apache.streampark.common.conf.Workspace;
-import org.apache.streampark.common.enums.ApplicationType;
 import org.apache.streampark.common.enums.DevelopmentMode;
 import org.apache.streampark.common.enums.ExecutionMode;
 import org.apache.streampark.common.enums.ResolveOrder;
@@ -1465,7 +1464,6 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
             appConf,
             application.getApplicationType(),
             getSavePointed(appParam),
-            appParam.getFlameGraph() ? getFlameGraph(application) : null,
             getProperties(application),
             applicationArgs,
             buildResult,
@@ -1502,7 +1500,6 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
                     application.setJobManagerUrl(submitResponse.jobManagerUrl());
                     applicationLog.setJobManagerUrl(submitResponse.jobManagerUrl());
                 }
-                application.setFlameGraph(appParam.getFlameGraph());
                 applicationLog.setYarnAppId(submitResponse.clusterId());
                 application.setStartTime(new Date());
                 application.setEndTime(null);
@@ -1681,15 +1678,4 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
         return null;
     }
 
-    private Map<String, Serializable> getFlameGraph(Application application) {
-        Map<String, Serializable> flameGraph = new HashMap<>(8);
-        flameGraph.put("reporter", "org.apache.streampark.plugin.profiling.reporter.HttpReporter");
-        flameGraph.put("type", ApplicationType.STREAMPARK_FLINK.getType());
-        flameGraph.put("id", application.getId());
-        flameGraph.put("url", settingService.getStreamParkAddress().concat("/metrics/report"));
-        flameGraph.put("token", Utils.uuid());
-        flameGraph.put("sampleInterval", 1000 * 60 * 2);
-        flameGraph.put("metricInterval", 1000 * 60 * 2);
-        return flameGraph;
-    }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlameGraphServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlameGraphServiceImpl.java
deleted file mode 100644
index 516588661..000000000
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlameGraphServiceImpl.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.console.core.service.impl;
-
-import org.apache.streampark.common.util.CommandUtils;
-import org.apache.streampark.console.base.util.CommonUtils;
-import org.apache.streampark.console.base.util.WebUtils;
-import org.apache.streampark.console.core.entity.Application;
-import org.apache.streampark.console.core.entity.FlameGraph;
-import org.apache.streampark.console.core.mapper.FlameGraphMapper;
-import org.apache.streampark.console.core.service.ApplicationService;
-import org.apache.streampark.console.core.service.FlameGraphService;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.IOUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-@Slf4j
-@Service
-@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
-public class FlameGraphServiceImpl extends ServiceImpl<FlameGraphMapper, FlameGraph>
-    implements FlameGraphService {
-
-    @Autowired
-    private ApplicationService applicationService;
-
-    @Override
-    public String generateFlameGraph(FlameGraph flameGraph) throws IOException {
-        LambdaQueryWrapper<FlameGraph> queryWrapper = new LambdaQueryWrapper<FlameGraph>()
-            .eq(FlameGraph::getAppId, flameGraph.getAppId())
-            .between(FlameGraph::getTimeline, flameGraph.getStart(), flameGraph.getEnd())
-            .orderByAsc(FlameGraph::getTimeline);
-        List<FlameGraph> flameGraphList = this.list(queryWrapper);
-
-        if (CommonUtils.notEmpty(flameGraphList)) {
-            StringBuffer jsonBuffer = new StringBuffer();
-            flameGraphList.forEach(x -> jsonBuffer.append(x.getUnzipContent()).append("\r\n"));
-
-            Application application = applicationService.getById(flameGraph.getAppId());
-            String jsonName = String.format(
-                "%d_%d_%d.json",
-                flameGraph.getAppId(),
-                flameGraph.getStart().getTime(),
-                flameGraph.getEnd().getTime()
-            );
-            String jsonPath = new File(WebUtils.getAppTempDir(), jsonName).getAbsolutePath();
-            String foldedPath = jsonPath.replace(".json", ".folded");
-            String svgPath = jsonPath.replace(".json", ".svg");
-            File flameGraphPath = WebUtils.getAppDir("bin/flame-graph");
-
-            // write json
-            FileOutputStream fileOutputStream = new FileOutputStream(jsonPath);
-            IOUtils.write(jsonBuffer.toString().getBytes(), fileOutputStream);
-
-            String title = application.getJobName().concat(" ___ FlameGraph");
-            // generate...
-            List<String> commands = Arrays.asList(
-                String.format("python ./stackcollapse.py -i %s > %s ", jsonPath, foldedPath),
-                String.format(
-                    "./flamegraph.pl --title=\"%s\" --width=%d --colors=java %s > %s ",
-                    title,
-                    flameGraph.getWidth(),
-                    foldedPath,
-                    svgPath
-                )
-            );
-            CommandUtils.execute(flameGraphPath.getAbsolutePath(), commands, (line) -> log.info("flameGraph: {} ", line));
-            return svgPath;
-        }
-        return null;
-    }
-
-    @Override
-    public void clean(Date end) {
-        LambdaQueryWrapper<FlameGraph> queryWrapper = new LambdaQueryWrapper<FlameGraph>()
-            .lt(FlameGraph::getTimeline, end);
-        this.remove(queryWrapper);
-    }
-}
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/task/MetricsTask.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/task/MetricsTask.java
deleted file mode 100644
index 6d214b1c9..000000000
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/task/MetricsTask.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.console.core.task;
-
-import org.apache.streampark.console.base.util.WebUtils;
-import org.apache.streampark.console.core.service.FlameGraphService;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Objects;
-import java.util.TimeZone;
-
-@Slf4j
-@Component
-public class MetricsTask {
-
-    @Autowired
-    private FlameGraphService flameGraphService;
-
-    private static final String FLAME_GRAPH_FILE_REGEXP = "\\d+_\\d+\\.json|\\d+_\\d+\\.folded|\\d+_\\d+\\.svg";
-
-    /**
-     * hour.
-     */
-    @Scheduled(cron = "0 0 * * * ?")
-    public void cleanFlameGraph() {
-        // 1) clean file
-        String tempPath = WebUtils.getAppTempDir().getAbsolutePath();
-        File temp = new File(tempPath);
-        Arrays.stream(Objects.requireNonNull(temp.listFiles()))
-            .filter(x -> x.getName().matches(FLAME_GRAPH_FILE_REGEXP))
-            .forEach(File::delete);
-
-        // 2 clean date
-        Date start = new Date();
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTimeZone(TimeZone.getDefault());
-        calendar.setTime(start);
-        calendar.add(Calendar.HOUR_OF_DAY, -24);
-        Date end = calendar.getTime();
-        flameGraphService.clean(end);
-    }
-}
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
index 840edc6eb..2aca32df2 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
@@ -123,7 +123,6 @@ public class AccessTokenController {
         if ("/flink/app/start".equalsIgnoreCase(path)) {
             resultCURL = curlBuilder
                 .addFormData("allowNonRestored", "false")
-                .addFormData("flameGraph", "false")
                 .addFormData("savePoint", "")
                 .addFormData("savePointed", "false")
                 .addFormData("id", appId)
diff --git a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
index 37b90c57a..be01ac160 100644
--- a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
+++ b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
@@ -25,7 +25,7 @@ insert into `t_team` values (100001, 'test', 'The test team', now(), now());
 -- ----------------------------
 -- Records of t_flink_app
 -- ----------------------------
-insert into `t_flink_app` values (100000, 100000, 2, 4, null, null, 'Flink SQL Demo', null, null, null, null, null, null , null, 100000, null, 1, null, null, null, null, null, null, null, '0', 0, null, null, null, null, null, null, 'Flink SQL Demo', 0, null, 0, null, null, null, null, null, null, 0, 0, now(), now(), null, 1, 1, null, null, null, null, null, null, 0, null, null, null, 'streampark,test');
+insert into `t_flink_app` values (100000, 100000, 2, 4, null, null, 'Flink SQL Demo', null, null, null, null, null , null, 100000, null, 1, null, null, null, null, null, null, null, '0', 0, null, null, null, null, null, null, 'Flink SQL Demo', 0, null, 0, null, null, null, null, null, null, 0, 0, now(), now(), null, 1, 1, null, null, null, null, null, null, 0, null, null, null, 'streampark,test');
 
 -- ----------------------------
 -- Records of t_flink_effective
@@ -76,7 +76,6 @@ insert into `t_menu` values (100029, 100015, 'savepoint delete', null, null, 'sa
 insert into `t_menu` values (100030, 100015, 'backup rollback', null, null, 'backup:rollback', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100031, 100015, 'backup delete', null, null, 'backup:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100032, 100015, 'conf delete', null, null, 'conf:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100033, 100015, 'flame Graph', null, null, 'app:flameGraph', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100034, 100013, 'menu.setting', '/flink/setting', 'flink/setting/View', null, 'setting', '0', 1, 5, now(), now());
 insert into `t_menu` values (100035, 100034, 'setting update', null, null, 'setting:update', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100036, 100014, 'edit', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', 0, null, now(), now());
diff --git a/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql b/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql
index 6e4b7f4a3..de4f16faa 100644
--- a/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql
+++ b/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql
@@ -31,18 +31,6 @@ create table if not exists `t_app_backup` (
   primary key(`id`)
 );
 
--- ----------------------------
--- Table structure for t_flame_graph
--- ----------------------------
-create table if not exists `t_flame_graph` (
-  `id` bigint generated by default as identity not null,
-  `app_id` bigint default null,
-  `profiler` varchar(255) default null,
-  `timeline` datetime default null,
-  `content` text,
-  primary key(`id`)
-);
-
 -- ----------------------------
 -- Table structure for t_flink_app
 -- ----------------------------
@@ -82,7 +70,6 @@ create table if not exists `t_flink_app` (
   `description` varchar(255)  default null,
   `resolve_order` tinyint default null,
   `k8s_rest_exposed_type` tinyint default null,
-  `flame_graph` tinyint default 0,
   `jm_memory` int default null,
   `tm_memory` int default null,
   `total_task` int default null,
diff --git a/streampark-console/streampark-console-service/src/main/resources/mapper/core/ApplicationMapper.xml b/streampark-console/streampark-console-service/src/main/resources/mapper/core/ApplicationMapper.xml
index 64be9cf55..7f23de927 100644
--- a/streampark-console/streampark-console-service/src/main/resources/mapper/core/ApplicationMapper.xml
+++ b/streampark-console/streampark-console-service/src/main/resources/mapper/core/ApplicationMapper.xml
@@ -55,7 +55,6 @@
         <result column="restart_count" jdbcType="INTEGER" property="restartCount"/>
         <result column="launch" jdbcType="INTEGER" property="launch"/>
         <result column="build" jdbcType="BOOLEAN" property="build"/>
-        <result column="flame_graph" jdbcType="BOOLEAN" property="flameGraph"/>
         <result column="resolve_order" jdbcType="INTEGER" property="resolveOrder"/>
         <result column="total_tm" jdbcType="INTEGER" property="totalTM"/>
         <result column="total_slot" jdbcType="INTEGER" property="totalSlot"/>
diff --git a/streampark-console/streampark-console-service/src/main/resources/mapper/core/FlameGraphMapper.xml b/streampark-console/streampark-console-service/src/main/resources/mapper/core/FlameGraphMapper.xml
deleted file mode 100644
index 1f04b421e..000000000
--- a/streampark-console/streampark-console-service/src/main/resources/mapper/core/FlameGraphMapper.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.apache.streampark.console.core.mapper.FlameGraphMapper">
-    <resultMap id="BaseResultMap" type="org.apache.streampark.console.core.entity.FlameGraph">
-        <id column="id" jdbcType="BIGINT" property="id"/>
-        <result column="app_id" jdbcType="BIGINT" property="appId"/>
-        <result column="timeline" jdbcType="DATE" property="timeline"/>
-        <result column="profiler" jdbcType="VARCHAR" property="profiler"/>
-        <result column="content" jdbcType="LONGVARCHAR" property="content"/>
-    </resultMap>
-</mapper>
diff --git a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java
index c6fc0c06f..3793c88b0 100644
--- a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java
+++ b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java
@@ -64,7 +64,6 @@ class ApplicationServiceTest {
         app.setResolveOrder(0);
         app.setExecutionMode(4);
         app.setAppType(2);
-        app.setFlameGraph(false);
         app.setTracking(0);
         app.setJar("SocketWindowWordCount.jar");
         app.setJarCheckSum(1553115525L);
@@ -86,7 +85,6 @@ class ApplicationServiceTest {
     void start() throws Exception {
         Application application = new Application();
         application.setId(1304056220683497473L);
-        application.setFlameGraph(false);
         application.setRestart(false);
         application.setSavePointed(false);
         application.setAllowNonRestored(false);
diff --git a/streampark-console/streampark-console-webapp/src/api/flink/app/app.type.ts b/streampark-console/streampark-console-webapp/src/api/flink/app/app.type.ts
index fb5f1777b..ea5284f78 100644
--- a/streampark-console/streampark-console-webapp/src/api/flink/app/app.type.ts
+++ b/streampark-console/streampark-console-webapp/src/api/flink/app/app.type.ts
@@ -71,7 +71,6 @@ export interface AppListRecord {
   executionMode: number;
   dynamicProperties?: string;
   appType: number;
-  flameGraph: boolean;
   tracking: number;
   jar?: string;
   jarCheckSum?: string;
diff --git a/streampark-console/streampark-console-webapp/src/api/flink/app/metrics.ts b/streampark-console/streampark-console-webapp/src/api/flink/app/metrics.ts
deleted file mode 100644
index e8f1a1650..000000000
--- a/streampark-console/streampark-console-webapp/src/api/flink/app/metrics.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { AxiosResponse } from 'axios';
-import { defHttp } from '/@/utils/http/axios';
-
-interface FlameGraphParam {
-  //application id
-  appId: string;
-  //The width of the screen
-  width: Number;
-}
-enum Metrics_API {
-  FLAME_GRAPH = '/metrics/flamegraph',
-  NOTICE = '/metrics/notice',
-  DEL_NOTICE = '/metrics/delnotice',
-}
-/**
- * export
- * @param {FlameGraphParam} data
- * @returns {Promise<AxiosResponse<Blob>>}
- */
-export function fetchFlamegraph(data: FlameGraphParam): Promise<AxiosResponse<Blob>> {
-  return defHttp.post(
-    {
-      url: Metrics_API.FLAME_GRAPH,
-      data,
-      responseType: 'blob',
-    },
-    { isReturnNativeResponse: true },
-  );
-}
diff --git a/streampark-console/streampark-console-webapp/src/api/flink/setting/types/flinkCluster.type.ts b/streampark-console/streampark-console-webapp/src/api/flink/setting/types/flinkCluster.type.ts
index 5cc7306bd..5d9412f24 100644
--- a/streampark-console/streampark-console-webapp/src/api/flink/setting/types/flinkCluster.type.ts
+++ b/streampark-console/streampark-console-webapp/src/api/flink/setting/types/flinkCluster.type.ts
@@ -31,7 +31,6 @@ export interface FlinkCluster {
   k8sHadoopIntegration: boolean;
   dynamicProperties: string;
   k8sRestExposedType: number;
-  flameGraph: boolean;
   k8sConf?: any;
   resolveOrder: number;
   exception?: any;
diff --git a/streampark-console/streampark-console-webapp/src/locales/lang/en/flink/app.ts b/streampark-console/streampark-console-webapp/src/locales/lang/en/flink/app.ts
index 10340842d..dee81a596 100644
--- a/streampark-console/streampark-console-webapp/src/locales/lang/en/flink/app.ts
+++ b/streampark-console/streampark-console-webapp/src/locales/lang/en/flink/app.ts
@@ -149,7 +149,6 @@ export default {
     force: 'Forced Stop Application',
     copy: 'Copy Application',
     remapping: 'Remapping Application',
-    flameGraph: 'View FlameGraph',
     deleteTip: 'Are you sure delete this job ?',
   },
   dashboard: {
diff --git a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/flink/app.ts b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/flink/app.ts
index 71ae22bed..097ceda2a 100644
--- a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/flink/app.ts
+++ b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/flink/app.ts
@@ -147,7 +147,6 @@ export default {
     force: '强制停止作业',
     copy: '复制作业',
     remapping: '重新映射作业',
-    flameGraph: '查看火焰图',
     deleteTip: '你确定要删除这个作业?',
   },
   dashboard: {
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StartApplicationModal.vue b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StartApplicationModal.vue
index 038267aeb..998d80d01 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StartApplicationModal.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StartApplicationModal.vue
@@ -53,18 +53,6 @@
     name: 'startApplicationModal',
     labelWidth: 120,
     schemas: [
-      {
-        field: 'flameGraph',
-        label: 'flame Graph',
-        component: 'Switch',
-        componentProps: {
-          checkedChildren: 'ON',
-          unCheckedChildren: 'OFF',
-        },
-        defaultValue: false,
-        afterItem: () => h('span', { class: 'conf-switch' }, 'flame Graph support'),
-        ifShow: () => isK8sExecMode(receiveData.executionMode),
-      },
       {
         field: 'startSavePointed',
         label: 'from savepoint',
@@ -130,7 +118,6 @@
         id: receiveData.application.id,
         savePointed,
         savePoint: savePointPath,
-        flameGraph: formValue.flameGraph || false,
         allowNonRestored: formValue.allowNonRestoredState || false,
       });
       if (data.data) {
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useAppTableAction.ts b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useAppTableAction.ts
index 49a2c10d5..9a1f406a3 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useAppTableAction.ts
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useAppTableAction.ts
@@ -21,7 +21,6 @@ import { useFlinkAppStore } from '/@/store/modules/flinkApplication';
 import { useFlinkApplication } from './useApp';
 import { fetchAppRecord, fetchAppRemove } from '/@/api/flink/app/app';
 import { AppListRecord } from '/@/api/flink/app/app.type';
-import { fetchFlamegraph } from '/@/api/flink/app/metrics';
 import { ActionItem, FormProps } from '/@/components/Table';
 import { useMessage } from '/@/hooks/web/useMessage';
 import {
@@ -177,13 +176,6 @@ export const useAppTableAction = (
         icon: 'ant-design:deployment-unit-outlined',
         onClick: handleMapping.bind(null, record),
       },
-      {
-        label: t('flink.app.operation.flameGraph'),
-        ifShow: record.flameGraph,
-        auth: 'app:flameGraph',
-        icon: 'ant-design:fire-outlined',
-        onClick: handleFlameGraph.bind(null, record),
-      },
       {
         popConfirm: {
           title: t('flink.app.operation.deleteTip'),
@@ -208,26 +200,6 @@ export const useAppTableAction = (
     ];
   }
 
-  async function handleFlameGraph(app: AppListRecord) {
-    const hide = createMessage.loading('flameGraph generating...', 0);
-    try {
-      const { data } = await fetchFlamegraph({
-        appId: app.id,
-        width: document.documentElement.offsetWidth || document.body.offsetWidth,
-      });
-      if (data) {
-        const blob = new Blob([data], { type: 'image/svg+xml' });
-        const imageUrl = (window.URL || window.webkitURL).createObjectURL(blob);
-        window.open(imageUrl);
-      }
-    } catch (error) {
-      console.error(error);
-      createMessage.error('flameGraph generate failed');
-    } finally {
-      hide();
-    }
-  }
-
   /* Click to delete */
   async function handleDelete(app: AppListRecord) {
     const hide = createMessage.loading('deleting', 0);
diff --git a/streampark-flink/streampark-flink-submit/streampark-flink-submit-api/src/main/scala/org/apache/streampark/flink/submit/bean/SubmitRequest.scala b/streampark-flink/streampark-flink-submit/streampark-flink-submit-api/src/main/scala/org/apache/streampark/flink/submit/bean/SubmitRequest.scala
index a39840247..9e3539214 100644
--- a/streampark-flink/streampark-flink-submit/streampark-flink-submit-api/src/main/scala/org/apache/streampark/flink/submit/bean/SubmitRequest.scala
+++ b/streampark-flink/streampark-flink-submit/streampark-flink-submit-api/src/main/scala/org/apache/streampark/flink/submit/bean/SubmitRequest.scala
@@ -52,7 +52,6 @@ case class SubmitRequest(flinkVersion: FlinkVersion,
                          appConf: String,
                          applicationType: ApplicationType,
                          savePoint: String,
-                         flameGraph: JavaMap[String, java.io.Serializable],
                          properties: JavaMap[String, Any],
                          args: String,
                          @Nullable buildResult: BuildResult,
diff --git a/streampark-flink/streampark-flink-submit/streampark-flink-submit-core/src/main/scala/org/apache/streampark/flink/submit/trait/FlinkSubmitTrait.scala b/streampark-flink/streampark-flink-submit/streampark-flink-submit-core/src/main/scala/org/apache/streampark/flink/submit/trait/FlinkSubmitTrait.scala
index 86f485919..e4e99eda0 100644
--- a/streampark-flink/streampark-flink-submit/streampark-flink-submit-core/src/main/scala/org/apache/streampark/flink/submit/trait/FlinkSubmitTrait.scala
+++ b/streampark-flink/streampark-flink-submit/streampark-flink-submit-core/src/main/scala/org/apache/streampark/flink/submit/trait/FlinkSubmitTrait.scala
@@ -69,7 +69,6 @@ trait FlinkSubmitTrait extends Logger {
          |    flinkExposedType : ${submitRequest.k8sSubmitParam.flinkRestExposedType}
          |    clusterId        : ${submitRequest.k8sSubmitParam.clusterId}
          |    applicationType  : ${submitRequest.applicationType.getName}
-         |    flameGraph       : ${submitRequest.flameGraph != null}
          |    savePoint        : ${submitRequest.savePoint}
          |    properties       : ${submitRequest.properties.mkString(" ")}
          |    args             : ${submitRequest.args}
@@ -187,16 +186,6 @@ trait FlinkSubmitTrait extends Logger {
 
   //----------Public Method end ------------------
 
-  private[submit] lazy val jvmProfilerJar: String = {
-    val pluginsPath = SystemPropertyUtils.get(ConfigConst.KEY_APP_HOME).concat("/plugins")
-    val pluginsDir = new File(pluginsPath)
-    pluginsDir.list().filter(_.matches("streampark-jvm-profiler-.*\\.jar")) match {
-      case Array() => throw new IllegalArgumentException(s"[StreamPark] can no found streampark-jvm-profiler jar in $pluginsPath")
-      case array if array.length == 1 => array.head
-      case more => throw new IllegalArgumentException(s"[StreamPark] found multiple streampark-jvm-profiler jar in $pluginsPath,[${more.mkString(",")}]")
-    }
-  }
-
   private[submit] def validateAndGetActiveCommandLine(customCommandLines: JavaList[CustomCommandLine], commandLine: CommandLine): CustomCommandLine = {
     val line = checkNotNull(commandLine)
     logInfo(s"Custom commandline: $customCommandLines")
@@ -276,14 +265,6 @@ trait FlinkSubmitTrait extends Logger {
         }
       })
 
-      //-jvm profile only on yarn support
-      if (Utils.notEmpty(submitRequest.flameGraph) && ExecutionMode.isYarnMode(submitRequest.executionMode)) {
-        val buffer = new StringBuffer()
-        submitRequest.flameGraph.foreach(p => buffer.append(s"${p._1}=${p._2},"))
-        val param = buffer.toString.dropRight(1)
-        array += s"-D${CoreOptions.FLINK_TM_JVM_OPTIONS.key()}=-javaagent:$$PWD/plugins/$jvmProfilerJar=$param"
-      }
-
       // app properties
       if (MapUtils.isNotEmpty(submitRequest.properties)) {
         submitRequest.properties.foreach(x => {
diff --git a/streampark-plugin/pom.xml b/streampark-plugin/pom.xml
deleted file mode 100644
index e826f3f23..000000000
--- a/streampark-plugin/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.streampark</groupId>
-        <artifactId>streampark</artifactId>
-        <version>2.0.0</version>
-    </parent>
-
-    <artifactId>streampark-plugin</artifactId>
-    <name>StreamPark : Plugin Parent</name>
-    <packaging>pom</packaging>
-
-    <properties>
-        <scalatest.skiptests>true</scalatest.skiptests>
-    </properties>
-
-    <modules>
-        <module>streampark-jvm-profiler</module>
-    </modules>
-
-    <build>
-        <plugins>
-            <!-- disable surefire -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.7</version>
-                <configuration>
-                    <skipTests>true</skipTests>
-                </configuration>
-            </plugin>
-            <!-- enable scalatest -->
-            <plugin>
-                <groupId>org.scalatest</groupId>
-                <artifactId>scalatest-maven-plugin</artifactId>
-                <version>2.0.2</version>
-                <configuration>
-                    <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
-                    <junitxml>.</junitxml>
-                    <filereports>WDF TestSuite.txt</filereports>
-                    <skipTests>${scalatest.skiptests}</skipTests>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>test</id>
-                        <goals>
-                            <goal>test</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/streampark-plugin/streampark-jvm-profiler/.travis.yml b/streampark-plugin/streampark-jvm-profiler/.travis.yml
deleted file mode 100644
index de77bbaed..000000000
--- a/streampark-plugin/streampark-jvm-profiler/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-language: java
-dist: trusty
-jdk:
-  - oraclejdk8
-  - openjdk8
diff --git a/streampark-plugin/streampark-jvm-profiler/metricDetails.md b/streampark-plugin/streampark-jvm-profiler/metricDetails.md
deleted file mode 100644
index 2e9d238ff..000000000
--- a/streampark-plugin/streampark-jvm-profiler/metricDetails.md
+++ /dev/null
@@ -1,169 +0,0 @@
-# Details of Metrics Collected by the JVM-Profiler
-
-1. CPU and Memory
-2. IO
-3. Process Info
-4. Stack Trace
-
-## 1. CPU and Memory
-
-|**Name**                                             |**Description**                                                  | **Sample Value**                      |**Note**                                                                               |
-|-----------------------------------------------------|-----------------------------------------------------------------|---------------------------------------|---------------------------------------------------------------------------------------|
-|time                                                 |Time series value for grafana database.                          | 1582504748538000000                   |                                                                                       |
-|appId                                                |Application id of the job that is running.                       | application_1576797426048_311346      |If using yarn, this is the yarn application id.                                        |
-|bufferPools-direct-count                             |Total number of direct byte buffers used at the recorded time.   | 55                                    |Depending on your application, this can be a smaller number                            |
-|bufferPools-direct-memoryUsed                        |Total memory of the direct byte buffers used in bytes.           | 18950                                 |An estimate. This value should be very similar to the total capacity for a healthy JVM.|
-|bufferPools-direct-name                              |Name of the buffer pool.                                         | direct                                |Direct buffer pools are always named direct.                                           |
-|bufferPools-direct-totalCapacity                     |Available capacity in bytes in the direct buffer pool.           | 18949                                 |Capacity should be similar to memoryUsed for a healthy JVM.                            |
-|bufferPools-mapped-count                             |Total number of mapped byte buffers used at the recorded time.   | 0                                     |In general, spark applications will not require mapped buffer pools.                   |
-|bufferPools-mapped-memoryUsed                        |Total memory of the mapped byte buffers used in bytes.           | 0                                     |An estimate. This value should be very similar to the total capacity for a healthy JVM.|
-|bufferPools-mapped-name                              |Name of the buffer pool.                                         | mapped                                |Mapped buffer pools are always named mapped.                                           |
-|bufferPools-mapped-totalCapacity                     |Available capacity in bytes in the mapped buffer pool.           | 0                                     |Capacity should be similar to memoryUsed for a healthy JVM.                            |
-|epochMillis                                          |System time in milliseconds when this value was recorded.        | 1582504781508                         |                                                                                       |
-|gc-PSMarkSweep-collectionCount                       |Total number of collections that have occurred for PS MarkSweep. | 7                                     |-1 if collection count is undefined for this collector.                                |
-|gc-PSMarkSweep-collectionTime                        |approximate accumulated collection elapsed time in milliseconds. | 914                                   |-1 if collection count is undefined for this collector.                                |
-|gc-PSMarkSweep-name                                  |Name of the collector.                                           | PS MarkSweep                          |Constant value.                                                                        |
-|gc-PSScavenge-collectionCount                        |Total number of collections that have occurred for PS Scavenge.  | 25                                    |-1 if collection count is undefined for this collector.                                |
-|gc-PSScavenge-collectionTime                         |approximate accumulated collection elapsed time in milliseconds. | 1206                                  |-1 if collection count is undefined for this collector.                                |
-|gc-PSScavenge-name                                   |Name of the collector.                                           | PS Scavenge                           |Constant value.                                                                        |
-|heapMemoryCommitted                                  |Amount of memory in bytes guaranteed for the JVM to use.         | 375914496                             |                                                                                       |
-|heapMemoryMax                                        |Max amount of memory in bytes that can be used                   | 11453595648                           |Also refer to spark.memory.fraction for the fraction managed by spark                  |
-|heapMemoryTotalUsed                                  |Total heap memory used in bytes                                  | 86386032                              |Total memory used should be less than committed and max heap memory.                   |
-|host                                                 |Hostname of the executor                                         | bigdata-datanode1.com                 |                                                                                       |
-|memoryPools-CodeCache-name                           |Name of the code cache.                                          | Code Cache                            |Constant value.                                                                        |
-|memoryPools-CodeCache-peakUsageCommitted             |Peak committed memory of this pool since the JVM was started     | 2555904                               |                                                                                       |
-|memoryPools-CodeCache-peakUsageMax                   |Peak value of usageMax of this pool since the JVM was started    | 251658240                             |                                                                                       |
-|memoryPools-CodeCache-peakUsageUsed                  |Peak value of memory of this pool used since the JVM was started.| 582656                                |                                                                                       |
-|memoryPools-CodeCache-type                           |The type of this memory pool.                                    | Non-heap memory                       |Code cache is a non-heap memory. So this value will always be constant.                |
-|memoryPools-CodeCache-usageCommitted                 |Total memory in bytes committed for this pool.                   | 2555904                               |                                                                                       |
-|memoryPools-CodeCache-usageMax                       |The maximum amount of memory that can be used by this pool.      | 251658240                             |-1 if undefined. Not guaranteed to be available if greater than the committed memory.  |
-|memoryPools-CodeCache-usageUsed                      |Amount of memory used by this pool.                              | 582656                                |Having some code cache memory free ensures it is usable for JIT compilation.           |
-|memoryPools-CompressedClassSpace-name                |Name of the compressed class space.                              | Compressed Class Space                |Is constant. This space is allocated in native memory for class metadata.              |
-|memoryPools-CompressedClassSpace-peakUsageCommitted  |Peak committed memory of this pool since JVM was started.        | 1572864                               |                                                                                       |
-|memoryPools-CompressedClassSpace-peakUsageMax        |Peak value of usageMax of this pool since the JVM was started.   | 1073741824                            |                                                                                       |
-|memoryPools-CompressedClassSpace-peakUsageUsed       |Peak value of usage of this pool since the JVM was started.      | 1389800                               |                                                                                       |
-|memoryPools-CompressedClassSpace-type                |Type of memory of this memory pool.                              | Non-heap memory                       |Compressed class space is native memory but is managed by the JVM                      |
-|memoryPools-CompressedClassSpace-usageCommitted      |Total memory in bytes committed for this pool.                   | 1572864                               |                                                                                       |
-|memoryPools-CompressedClassSpace-usageMax            |The maximum amount of memory that can be used by this pool       | 1073741824                            |-1 if undefined. Not guaranteed to be available if greater than the committed memory.  |
-|memoryPools-CompressedClassSpace-usageUsed           |Amount of memory used by this pool.                              | 1389800                               |                                                                                       |
-|memoryPools-Metaspace-name                           |Name of the Metaspace.                                           | Metaspace                             |Is constant. Metaspace is always called metaspace.                                     |
-|memoryPools-Metaspace-peakUsageCommitted             |Peak committed memory of this pool since JVM was started.        | 12320768                              |                                                                                       |
-|memoryPools-Metaspace-peakUsageMax                   |Peak value of usageMax of this pool since the JVM was started.   | -1                                    |-1 if undefined.                                                                       |
-|memoryPools-Metaspace-peakUsageUsed                  |Peak value of usage of this pool since the JVM was started.      | 11768752                              |                                                                                       |
-|memoryPools-Metaspace-type                           |Type of memory of this memory pool.                              | Non-heap memory                       |Metaspace is native memory (since JDK 8) but is managed by the JVM                     |
-|memoryPools-Metaspace-usageCommitted                 |Total memory in bytes committed for this pool.                   | 12320768                              |                                                                                       |
-|memoryPools-Metaspace-usageMax                       |The maximum amount of memory that can be used by this pool       | -1                                    |-1 if undefined. Not guaranteed to be available if greater than the committed memory.  |
-|memoryPools-Metaspace-usageUsed                      |Amount of memory used by this pool.                              | 11768752                              |The amount of space used by loaded classes.                                            |
-|memoryPools-PSEdenSpace-name                         |Name of the young generation heap space.                         | PS Eden Space                         |Is constant. PS Eden space is always called PS Eden Space.                             |
-|memoryPools-PSEdenSpace-peakUsageCommitted           |Peak committed memory of this pool since JVM was started.        | 98041856                              |                                                                                       |
-|memoryPools-PSEdenSpace-peakUsageMax                 |Peak value of usageMax of this pool since the JVM was started.   | 4262461440                            |-1 if undefined.                                                                       |
-|memoryPools-PSEdenSpace-peakUsageUsed                |Peak value of usage of this pool since the JVM was started.      | 92270136                              |                                                                                       |
-|memoryPools-PSEdenSpace-type                         |Type of memory of this memory pool.                              | Heap memory                           |PS Eden space is a portion of the heap memory that is managed by the JVM               |
-|memoryPools-PSEdenSpace-usageCommitted               |Total memory in bytes committed for this pool.                   | 98041856                              |                                                                                       |
-|memoryPools-PSEdenSpace-usageMax                     |The maximum amount of memory that can be used by this pool       | 8589934592                            |-1 if undefined. Not guaranteed to be available if greater than the committed memory.  |
-|memoryPools-PSEdenSpace-usageUsed                    |Amount of memory used by this pool (and by newly loaded classes).| 92270136                              |A continuously increasing value indicates an unhealthy garbage collection.             |
-|memoryPools-PSOldGen-name                            |Name of the old generation heap space.                           | PS Old Gen                            |Is constant. PS Old Gen space is always called PS Old Gen.                             |
-|memoryPools-PSOldGen-peakUsageCommitted              |Peak committed memory of this pool since JVM was started.        | 261619712                             |                                                                                       |
-|memoryPools-PSOldGen-peakUsageMax                    |Peak value of usageMax of this pool since the JVM was started.   | 8589934592                            |-1 if undefined.                                                                       |
-|memoryPools-PSOldGen-peakUsageUsed                   |Peak value of usage of this pool since the JVM was started.      | 0                                     |                                                                                       |
-|memoryPools-PSOldGen-type                            |Type of memory of this memory pool.                              | Heap memory                           |PS Old Gen space is a portion of the heap memory that is managed by the JVM            |
-|memoryPools-PSOldGen-usageCommitted                  |Total memory in bytes committed for this pool.                   | 261619712                             |                                                                                       |
-|memoryPools-PSOldGen-usageMax                        |The maximum amount of memory that can be used by this pool       | 8589934592                            |-1 if undefined. Not guaranteed to be available if greater than the committed memory.  |
-|memoryPools-PSOldGen-usageUsed                       |Amount of memory used by this pool (by objects beyond threshold).| 0                                     |A continuously increasing value indicates an unhealthy garbage collection.             |
-|memoryPools-PSSurvivorSpace-name                     |Name of the survivor heap space.                                 | PS Survivor Space                     |Is constant. PS Survivor Space is always called PS Survivor Space.                     |
-|memoryPools-PSSurvivorSpace-peakUsageCommitted       |Peak committed memory of this pool since JVM was started.        | 16252928                              |                                                                                       |
-|memoryPools-PSSurvivorSpace-peakUsageMax             |Peak value of usageMax of this pool since the JVM was started.   | 16252928                              |-1 if undefined.                                                                       |
-|memoryPools-PSSurvivorSpace-peakUsageUsed            |Peak value of usage of this pool since the JVM was started.      | 0                                     |                                                                                       |
-|memoryPools-PSSurvivorSpace-type                     |Type of memory of this memory pool.                              | Heap memory                           |PS Survivor Space is a portion of the heap memory that is managed by the JVM           |
-|memoryPools-PSSurvivorSpace-usageCommitted           |Total memory in bytes committed for this pool.                   | 16252928                              |                                                                                       |
-|memoryPools-PSSurvivorSpace-usageMax                 |The maximum amount of memory that can be used by this pool       | 16252928                              |-1 if undefined. Not guaranteed to be available if greater than the committed memory.  |
-|memoryPools-PSSurvivorSpace-usageUsed                |Amount of memory used by this pool (and by newly loaded classes).| 0                                     |A continuously increasing value indicates an unhealthy garbage collection.             |
-|name                                                 |Process name (number)                                            | 12345@bigdata-datanode1.com           |Also contains host name.                                                               |
-|nonHeapMemoryCommitted                               |Amount of non heap memory in bytes committed for the JVM to use. | 16187392                              |Total of committed of all non-heap memory pools.                                       |
-|nonHeapMemoryMax                                     |Maximum amount of memory in bytes that can be used.              | -1                                    |-1 if undefined.                                                                       |
-|nonHeapMemoryTotalUsed                               |Amount of non heap memory (metaspace, code cache) used.          | 13510368                              |Total of usage of all non-heap memory pools.                                           |
-|processCpuLoad                                       |The recent cpu usage for the JVM process.                        | 4.335671366438364e-9                  |                                                                                       |
-|processCpuTime                                       |CPU time used by JVM process in nanoseconds.                     | 2340000000                            |                                                                                       |
-|processUuid                                          |UUID of the JVM process.                                         | 48abf05b-dfd4-4069-86c6-8cdbc195bd40  |                                                                                       |
-|processUuid_1                                        |UUID of the JVM process.                                         | 48abf05b-dfd4-4069-86c6-8cdbc195bd40  |Appears to be a duplicate metric.                                                      |
-|role                                                 |Role of this spark executor.                                     | executor                              |Can be either executor or driver.                                                      |
-|systemCpuLoad                                        |The recent cpu usage for the whole system.                       | 0.03703887412577616                   |                                                                                       |
-|vmHWM                                                |Peak resident set size ("High Water Mark") in bytes for the JVM. | 142876672                             |An indication of actual physical memory (RAM) usage in linux by the JVM.               |
-|vmPeak                                               |Peak of the virtual memory usage in bytes for the JVM.           | 15130554368                           |                                                                                       |
-|vmRSS                                                |JVM physical memory usage (resident set size) in bytes.          | 142876672                             |                                                                                       |
-|vmSize                                               |Virtual memory size for the JVM.                                 | 15130550272                           |This memory includes swap space, so a large value can imply high swap memory usage.    |
-
-## 2. IO
-
-|**Name**               |**Description**                                                  | **Sample Value**                      |**Notes**                                                                              |
-|-----------------------|-----------------------------------------------------------------|---------------------------------------|---------------------------------------------------------------------------------------|
-|time                   |Time series value for grafana database.                          | 1582504713009000000                   |                                                                                       |
-|appId                  |Application id for the job that is running.                      | application_1576797426048_311346      |If using yarn, this is the yarn application id.                                        |
-|epochMillis            |System time in milliseconds when this value was recorded.        | 1582504713001                         |                                                                                       |
-|host                   |Hostname of the executor.                                        | bigdata-datanode1.com                 |                                                                                       |
-|name                   |Process name (number).                                           | 12345@bigdata-datanode1.com           |Includes the hostname as well.                                                         |
-|processUuid            |UUID of the JVM process.                                         | 89a256c7-96c3-4e48-b5ba-f55e886ba743  |                                                                                       |
-|processUuid_1          |UUID of the JVM process.                                         | 89a256c7-96c3-4e48-b5ba-f55e886ba743  |Appears to be a duplicate metric.                                                      |
-|role                   |Role of this spark executor.                                     | executor                              |Can be either executor or driver.                                                      |
-|self-io-rchar-1        |The number of characters read by this JVM process.               | 8192340                               |The "-1" is coming from the formatter for influx which was used when writting this.    |
-|self-io-read_bytes-1   |Attempt to count the bytes read by this JVM process from storage.| 1892352                               |                                                                                       |
-|self-io-wchar-1        |The number of characters written to disk by this JVM process.    | 51016                                 |                                                                                       |
-|self-io-write_bytes-1  |Attempt to count the bytes written by JVM process to storage.    | 86016                                 |                                                                                       |
-|stat-cpu-N             |CPU entry found in /proc/<pid>/stat.                             | cpu, cpu0, cpu1, cpu2 ...             |N is the CPU number starting at cpu-1 (i.e. cpu) which aggregates all other CPU lines. |
-|stat-idle-N            |Time the N-th CPU spent in the idle task.                        | 53679018                              |Time is in USER_HZ (1/100th of a second).                                              |
-|stat-iowait-N          |Time spent by N-th CPU waiting for I/O to complete.              | 137645010                             |                                                                                       |
-|stat-nice-N            |Time spent by N-th CPU in user mode with low priority (nice).    | 104                                   |Low idle time with high nice time are indications of busy background tasks running.    |
-|stat-system-N          |Time spent by N-th CPU in system mode.                           | 32700364                              |Time spent at kernel level.                                                            |
-|stat-user-N            |Time spent by N-th CPU at the user (application) level           | 279816973                             |                                                                                       |
-
-## 3. Process Info
-
-|**Name**          |**Description**                                                  | **Sample Value**                               |**Notes**                                                                              |
-|------------------|-----------------------------------------------------------------|------------------------------------------------|---------------------------------------------------------------------------------------|
-|time              |Time series value for grafana database.                          | 1582504713009000000                            |                                                                                       |
-|agentVersion      |A constant value defined in code.                                | 1.0.0                                          |Agent version will always be 1.0.0.                                                    |
-|appId             |Application id for the job that is running.                      | application_1576797426048_311346               |If using yarn, this is the yarn application id.                                        |
-|cmdline           |Contains JVM command executed and input arguments and classpath. | /usr/jdk64/jdk1.8.0_112/bin/java -javaagent... |                                                                                       |
-|epochMillis       |System time in milliseconds when this value was recorded.        | 1582504713001                                  |                                                                                       |
-|host              |Hostname of the executor.                                        | bigdata-datanode1.com                          |                                                                                       |
-|jvmClassPath      |Contains JVM classpath entries.                                  | --user-class-path .../jvm-profiler-1.0.0.jar   |This entry is emtpy if cmdLine is not empty. This is to avoid duplicate information.   |
-|jvmInputArguments |Contains JVM input arguments.                                    | metricInterval=5000,sampleInterval=5000 ...    |This entry is emtpy if cmdLine is not empty. This is to avoid duplicate information.   |
-|name              |Process name (number).                                           | 12345@bigdata-datanode1.com                    |Includes the hostname as well.                                                         |
-|processUuid       |UUID of the JVM process.                                         | 89a256c7-96c3-4e48-b5ba-f55e886ba743           |                                                                                       |
-|processUuid_1     |UUID of the JVM process.                                         | 89a256c7-96c3-4e48-b5ba-f55e886ba743           |Appears to be a duplicate metric.                                                      |
-|role              |Role of this spark executor.                                     | executor                                       |Can be either executor or driver.                                                      |
-|xmxBytes          |Maximum JVM heap size in bytes.                                  | 12884901888                                    |                                                                                       |
-
-## 4. Stack Trace
-
-|**Name**      |**Description**                                                  | **Sample Value**                        |**Notes**                                                                              |
-|--------------|-----------------------------------------------------------------|-----------------------------------------|---------------------------------------------------------------------------------------|
-|time          |Time series value for grafana database.                          | 1582504713009000000                     |                                                                                       |
-|appId         |Application id for the job that is running.                      | application_1576797426048_311346        |If using yarn, this is the yarn application id.                                        |
-|count         |Number of elements appended to the metrics buffer.               | 1                                       |This value is usually 1, but not guaranteed to be constant. It is thread-safe.         |
-|endEpoch      |System time in milliseconds after resetting the metrics buffer.  | 1582504712723                           |The metrics buffer is an internal buffer used by this profiling application.           |
-|host          |Hostname of the executor.                                        | bigdata-datanode1.com                   |                                                                                       |
-|name          |Process name (number).                                           | 12345@bigdata-datanode1.com             |Includes the hostname as well.                                                         |
-|processUuid   |UUID of the JVM process.                                         | 89a256c7-96c3-4e48-b5ba-f55e886ba743    |                                                                                       |
-|processUuid_1 |UUID of the JVM process.                                         | 89a256c7-96c3-4e48-b5ba-f55e886ba743    |Appears to be a duplicate metric.                                                      |
-|role          |Role of this spark executor.                                     | executor                                |Can be either executor or driver.                                                      |
-|stacktrace    |Stacktrace starting from bottom of the stacktrace.               | java.lang.Object.wait,java.lang.ref ... |Trims the top method (most nested method) if the size is too large (800k characters)   |
-|startEpoch    |System time in milliseconds before resetting the metrics buffer. | 1582504710523                           |The metrics buffer is an internal buffer used by this profiling application.           |
-|threadName    |Name of the thread for which stacktrace is displayed.            | Signal Dispatcher                       |                                                                                       |
-|threadState   |State of the thread when this stacktrace was captured.           | NEW, RUNNABLE, BLOCKED, WAITING ...     |                                                                                       |
-
-## 5. Thread Info
-
-|**Name**                |**Description**                                           | **Sample Value**                      |**Notes**                                       |
-|------------------------|----------------------------------------------------------|---------------------------------------|------------------------------------------------|
-|time                    |Time series value for grafana database.                   | 1582504713009000000                   |                                                |
-|epochMillis             |System time in milliseconds when this value was recorded. | 1582504781508                         |                                                |
-|host                    |Hostname of the executor.                                 | bigdata-datanode1.com                 |                                                |
-|name                    |Process name (number).                                    | 12345@bigdata-datanode1.com           |Includes the hostname as well.                  |
-|appId                   |Application id for the job that is running.               | application_1576797426048_311346      |If using yarn, this is the yarn application id. |
-|processUuid             |UUID of the JVM process.                                  | 89a256c7-96c3-4e48-b5ba-f55e886ba743  |                                                |
-|role                    |Role of this spark executor.                              | executor                              |Can be either executor or driver.               |
-|totalStartedThreadCount |Total Number of Thread created so far since JVm Launch.   | 10                                    |                                                |
-|liveThreadCount         |Number of thread which are currently active.              | 8                                     |                                                |
-|newThreadCount          |Number of thread which are newly Created.                 | 3                                     | Derived from last Cycle Total Threads.         |
-|peakThreadCount         |the peak live thread count since the JVM start            | 8                                     |                                                |
diff --git a/streampark-plugin/streampark-jvm-profiler/pom.xml b/streampark-plugin/streampark-jvm-profiler/pom.xml
deleted file mode 100644
index 7d93ba214..000000000
--- a/streampark-plugin/streampark-jvm-profiler/pom.xml
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.streampark</groupId>
-        <artifactId>streampark-plugin</artifactId>
-        <version>2.0.0</version>
-    </parent>
-
-    <artifactId>streampark-jvm-profiler</artifactId>
-    <name>StreamPark : JVM Profiler</name>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.scalaj</groupId>
-            <artifactId>scalaj-http_${scala.binary.version}</artifactId>
-            <version>2.4.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.javassist</groupId>
-            <artifactId>javassist</artifactId>
-            <version>3.21.0-GA</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-        </dependency>
-
-        <!--test-->
-        <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-engine</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>2.6</version>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Agent-Class>org.apache.streampark.plugin.profiling.Agent</Agent-Class>
-                            <Premain-Class>org.apache.streampark.plugin.profiling.Agent</Premain-Class>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <createDependencyReducedPom>true</createDependencyReducedPom>
-                            <dependencyReducedPomLocation>${project.basedir}/target/dependency-reduced-pom.xml</dependencyReducedPomLocation>
-                            <relocations>
-                                <relocation>
-                                    <pattern>org.apache</pattern>
-                                    <shadedPattern>jagent.shaded.org.apache</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>com.fasterxml</pattern>
-                                    <shadedPattern>jagent.shaded.com.fasterxml</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.codehaus</pattern>
-                                    <shadedPattern>jagent.shaded.org.codehaus</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>com.thoughtworks</pattern>
-                                    <shadedPattern>jagent.shaded.com.thoughtworks</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.xerial</pattern>
-                                    <shadedPattern>jagent.shaded.org.xerial</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.tukaani</pattern>
-                                    <shadedPattern>jagent.shaded.org.tukaani</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.slf4j</pattern>
-                                    <shadedPattern>jagent.shaded.org.slf4j</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>com.alibaba</pattern>
-                                    <shadedPattern>jagent.shaded.com.alibaba</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>net.logstash</pattern>
-                                    <shadedPattern>jagent.shaded.net.logstash</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>com.timgroup</pattern>
-                                    <shadedPattern>jagent.shaded.com.timgroup</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>com.amazonaws</pattern>
-                                    <shadedPattern>jagent.shaded.com.amazonaws</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.javassist</pattern>
-                                    <shadedPattern>jagent.shaded.org.javassist</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.joda</pattern>
-                                    <shadedPattern>jagent.shaded.org.joda</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>avro</pattern>
-                                    <shadedPattern>jagent.shaded.avro</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>edu</pattern>
-                                    <shadedPattern>jagent.shaded.edu</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>javassist</pattern>
-                                    <shadedPattern>jagent.shaded.javassist</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>net</pattern>
-                                    <shadedPattern>jagent.shaded.net</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>com.shade</pattern>
-                                    <shadedPattern>jagent.shaded.com.shade</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.yaml</pattern>
-                                    <shadedPattern>ujagent_org.yaml</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>redis.clients</pattern>
-                                    <shadedPattern>jagent.shaded.redis.clients</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.influxdb</pattern>
-                                    <shadedPattern>jagent.shaded.org.influxdb</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>ch</pattern>
-                                    <shadedPattern>jagent.shaded.ch</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>okio</pattern>
-                                    <shadedPattern>jagent.shaded.okio</shadedPattern>
-                                </relocation>
-                            </relocations>
-                            <filters>
-                                <filter>
-                                    <artifact>*:*</artifact>
-                                    <excludes>
-                                        <exclude>META-INF/maven/**</exclude>
-                                        <exclude>META-INF/services/com.fasterxml.**</exclude>
-                                        <exclude>awssdk_config_default.json</exclude>
-                                        <exclude>heatpipe.config.properties</exclude>
-                                        <exclude>log4j.properties</exclude>
-                                        <exclude>kafka/kafka-version.properties</exclude>
-                                        <exclude>darwin/x86_64/liblz4-java.dylib</exclude>
-                                        <exclude>linux/amd64/liblz4-java.so</exclude>
-                                        <exclude>linux/i386/liblz4-java.so</exclude>
-                                        <exclude>win32/amd64/liblz4-java.so</exclude>
-                                    </excludes>
-                                </filter>
-                            </filters>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>com.ning.maven.plugins</groupId>
-                <artifactId>maven-dependency-versions-check-plugin</artifactId>
-                <version>2.0.4</version>
-                <executions>
-                    <execution>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <version>2.19.1</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>integration-test</goal>
-                            <goal>verify</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Agent.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Agent.java
deleted file mode 100644
index 905ee1fa2..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Agent.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-
-import java.lang.instrument.Instrumentation;
-
-public final class Agent {
-
-    private static final AgentLogger LOGGER = AgentLogger.getLogger(Agent.class.getName());
-
-    private static final AgentImpl AGENT_IMPL = new AgentImpl();
-
-    private Agent() {
-    }
-
-    public static void agentmain(final String args, final Instrumentation instrumentation) {
-        premain(args, instrumentation);
-    }
-
-    public static void premain(final String args, final Instrumentation instrumentation) {
-        LOGGER.info("Java Agent " + AgentImpl.VERSION + " premain args: " + args);
-        Arguments arguments = Arguments.parseArgs(args);
-        arguments.runConfigProvider();
-        AGENT_IMPL.run(arguments, instrumentation, null);
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/AgentImpl.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/AgentImpl.java
deleted file mode 100644
index 815db95e6..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/AgentImpl.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import org.apache.streampark.plugin.profiling.profiler.CpuAndMemoryProfiler;
-import org.apache.streampark.plugin.profiling.profiler.IOProfiler;
-import org.apache.streampark.plugin.profiling.profiler.MethodArgumentCollector;
-import org.apache.streampark.plugin.profiling.profiler.MethodArgumentProfiler;
-import org.apache.streampark.plugin.profiling.profiler.MethodDurationCollector;
-import org.apache.streampark.plugin.profiling.profiler.MethodDurationProfiler;
-import org.apache.streampark.plugin.profiling.profiler.ProcessInfoProfiler;
-import org.apache.streampark.plugin.profiling.profiler.StacktraceCollectorProfiler;
-import org.apache.streampark.plugin.profiling.profiler.StacktraceReporterProfiler;
-import org.apache.streampark.plugin.profiling.profiler.ThreadInfoProfiler;
-import org.apache.streampark.plugin.profiling.transformer.JavaAgentFileTransformer;
-import org.apache.streampark.plugin.profiling.transformer.MethodProfilerStaticProxy;
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethodLongMetricBuffer;
-import org.apache.streampark.plugin.profiling.util.ClassMethodArgumentMetricBuffer;
-import org.apache.streampark.plugin.profiling.util.SparkUtils;
-import org.apache.streampark.plugin.profiling.util.StacktraceMetricBuffer;
-
-import java.lang.instrument.Instrumentation;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-public class AgentImpl {
-    public static final String VERSION = "1.0.0";
-
-    private static final AgentLogger LOGGER = AgentLogger.getLogger(AgentImpl.class.getName());
-
-    private static final int MAX_THREAD_POOL_SIZE = 2;
-
-    private boolean started = false;
-
-    public void run(
-        Arguments arguments,
-        Instrumentation instrumentation,
-        Collection<AutoCloseable> objectsToCloseOnShutdown) {
-        if (arguments.isNoop()) {
-            LOGGER.info("Agent noop is true, do not run anything");
-            return;
-        }
-
-        Reporter reporter = arguments.getReporter();
-
-        String processUuid = UUID.randomUUID().toString();
-
-        String appId = null;
-
-        String appIdVariable = arguments.getAppIdVariable();
-        if (appIdVariable != null && !appIdVariable.isEmpty()) {
-            appId = System.getenv(appIdVariable);
-        }
-
-        if (appId == null || appId.isEmpty()) {
-            appId = SparkUtils.probeAppId(arguments.getAppIdRegex());
-        }
-
-        if (!arguments.getDurationProfiling().isEmpty()
-            || !arguments.getArgumentProfiling().isEmpty()) {
-            instrumentation.addTransformer(
-                new JavaAgentFileTransformer(
-                    arguments.getDurationProfiling(), arguments.getArgumentProfiling()));
-        }
-
-        List<Profiler> profilers = createProfilers(reporter, arguments, processUuid, appId);
-
-        ProfilerGroup profilerGroup = startProfilers(profilers);
-
-        Thread shutdownHook =
-            new Thread(
-                new ShutdownHookRunner(
-                    profilerGroup.getPeriodicProfilers(),
-                    Collections.singletonList(reporter),
-                    objectsToCloseOnShutdown));
-        Runtime.getRuntime().addShutdownHook(shutdownHook);
-    }
-
-    public ProfilerGroup startProfilers(Collection<Profiler> profilers) {
-        if (started) {
-            LOGGER.warn("Profilers already started, do not start it again");
-            return new ProfilerGroup(new ArrayList<>(), new ArrayList<>());
-        }
-
-        List<Profiler> oneTimeProfilers = new ArrayList<>();
-        List<Profiler> periodicProfilers = new ArrayList<>();
-
-        for (Profiler profiler : profilers) {
-            if (profiler.getInterval() == 0) {
-                oneTimeProfilers.add(profiler);
-            } else if (profiler.getInterval() > 0) {
-                periodicProfilers.add(profiler);
-            } else {
-                LOGGER.log(
-                    String.format(
-                        "Ignored profiler %s due to its invalid interval %s",
-                        profiler, profiler.getInterval()));
-            }
-        }
-
-        for (Profiler profiler : oneTimeProfilers) {
-            try {
-                profiler.profile();
-                LOGGER.info("Finished one time profiler: " + profiler);
-            } catch (Throwable ex) {
-                LOGGER.warn("Failed to run one time profiler: " + profiler, ex);
-            }
-        }
-
-        for (Profiler profiler : periodicProfilers) {
-            try {
-                profiler.profile();
-                LOGGER.info("Ran periodic profiler (first run): " + profiler);
-            } catch (Throwable ex) {
-                LOGGER.warn("Failed to run periodic profiler (first run): " + profiler, ex);
-            }
-        }
-        scheduleProfilers(periodicProfilers);
-        started = true;
-        return new ProfilerGroup(oneTimeProfilers, periodicProfilers);
-    }
-
-    private List<Profiler> createProfilers(
-        Reporter reporter, Arguments arguments, String processUuid, String appId) {
-        String tag = arguments.getTag();
-        String cluster = arguments.getCluster();
-        long metricInterval = arguments.getMetricInterval();
-
-        List<Profiler> profilers = new ArrayList<>();
-
-        CpuAndMemoryProfiler cpuAndMemoryProfiler = new CpuAndMemoryProfiler(reporter);
-        cpuAndMemoryProfiler.setTag(tag);
-        cpuAndMemoryProfiler.setCluster(cluster);
-        cpuAndMemoryProfiler.setInterval(metricInterval);
-        cpuAndMemoryProfiler.setProcessUuid(processUuid);
-        cpuAndMemoryProfiler.setAppId(appId);
-        profilers.add(cpuAndMemoryProfiler);
-
-        ThreadInfoProfiler threadInfoProfiler = new ThreadInfoProfiler(reporter);
-        threadInfoProfiler.setTag(tag);
-        threadInfoProfiler.setCluster(cluster);
-        threadInfoProfiler.setInterval(metricInterval);
-        threadInfoProfiler.setProcessUuid(processUuid);
-        threadInfoProfiler.setAppId(appId);
-        profilers.add(threadInfoProfiler);
-
-        ProcessInfoProfiler processInfoProfiler = new ProcessInfoProfiler(reporter);
-        processInfoProfiler.setTag(tag);
-        processInfoProfiler.setCluster(cluster);
-        processInfoProfiler.setProcessUuid(processUuid);
-        processInfoProfiler.setAppId(appId);
-        profilers.add(processInfoProfiler);
-
-        if (!arguments.getDurationProfiling().isEmpty()) {
-            ClassAndMethodLongMetricBuffer classAndMethodMetricBuffer =
-                new ClassAndMethodLongMetricBuffer();
-
-            MethodDurationProfiler methodDurationProfiler =
-                new MethodDurationProfiler(classAndMethodMetricBuffer, reporter);
-            methodDurationProfiler.setTag(tag);
-            methodDurationProfiler.setCluster(cluster);
-            methodDurationProfiler.setInterval(metricInterval);
-            methodDurationProfiler.setProcessUuid(processUuid);
-            methodDurationProfiler.setAppId(appId);
-
-            MethodDurationCollector methodDurationCollector =
-                new MethodDurationCollector(classAndMethodMetricBuffer);
-            MethodProfilerStaticProxy.setCollector(methodDurationCollector);
-
-            profilers.add(methodDurationProfiler);
-        }
-
-        if (!arguments.getArgumentProfiling().isEmpty()) {
-            ClassMethodArgumentMetricBuffer classAndMethodArgumentBuffer =
-                new ClassMethodArgumentMetricBuffer();
-
-            MethodArgumentProfiler methodArgumentProfiler =
-                new MethodArgumentProfiler(classAndMethodArgumentBuffer, reporter);
-            methodArgumentProfiler.setTag(tag);
-            methodArgumentProfiler.setCluster(cluster);
-            methodArgumentProfiler.setInterval(metricInterval);
-            methodArgumentProfiler.setProcessUuid(processUuid);
-            methodArgumentProfiler.setAppId(appId);
-
-            MethodArgumentCollector methodArgumentCollector =
-                new MethodArgumentCollector(classAndMethodArgumentBuffer);
-            MethodProfilerStaticProxy.setArgumentCollector(methodArgumentCollector);
-
-            profilers.add(methodArgumentProfiler);
-        }
-
-        if (arguments.getSampleInterval() > 0) {
-            StacktraceMetricBuffer stacktraceMetricBuffer = new StacktraceMetricBuffer();
-
-            StacktraceCollectorProfiler stacktraceCollectorProfiler =
-                new StacktraceCollectorProfiler(stacktraceMetricBuffer, AgentThreadFactory.NAME_PREFIX);
-            stacktraceCollectorProfiler.setInterval(arguments.getSampleInterval());
-
-            StacktraceReporterProfiler stacktraceReporterProfiler =
-                new StacktraceReporterProfiler(stacktraceMetricBuffer, reporter);
-            stacktraceReporterProfiler.setTag(tag);
-            stacktraceReporterProfiler.setCluster(cluster);
-            stacktraceReporterProfiler.setInterval(metricInterval);
-            stacktraceReporterProfiler.setProcessUuid(processUuid);
-            stacktraceReporterProfiler.setAppId(appId);
-
-            profilers.add(stacktraceCollectorProfiler);
-            profilers.add(stacktraceReporterProfiler);
-        }
-
-        if (arguments.isIoProfiling()) {
-            IOProfiler ioProfiler = new IOProfiler(reporter);
-            ioProfiler.setTag(tag);
-            ioProfiler.setCluster(cluster);
-            ioProfiler.setInterval(metricInterval);
-            ioProfiler.setProcessUuid(processUuid);
-            ioProfiler.setAppId(appId);
-
-            profilers.add(ioProfiler);
-        }
-
-        return profilers;
-    }
-
-    private void scheduleProfilers(Collection<Profiler> profilers) {
-        int threadPoolSize = Math.min(profilers.size(), MAX_THREAD_POOL_SIZE);
-        ScheduledExecutorService scheduledExecutorService =
-            Executors.newScheduledThreadPool(threadPoolSize, new AgentThreadFactory());
-        for (Profiler profiler : profilers) {
-            if (profiler.getInterval() < Arguments.MIN_INTERVAL_MILLIS) {
-                throw new RuntimeException(
-                    "Interval too short for profiler: "
-                        + profiler
-                        + ", must be at least "
-                        + Arguments.MIN_INTERVAL_MILLIS);
-            }
-            ProfilerRunner worker = new ProfilerRunner(profiler);
-            scheduledExecutorService.scheduleAtFixedRate(
-                worker, 0, profiler.getInterval(), TimeUnit.MILLISECONDS);
-            LOGGER.info(
-                String.format(
-                    "Scheduled profiler %s with interval %s millis", profiler, profiler.getInterval()));
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/AgentThreadFactory.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/AgentThreadFactory.java
deleted file mode 100644
index 42c928b25..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/AgentThreadFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-
-public class AgentThreadFactory implements ThreadFactory {
-    public static final String NAME_PREFIX = "uber_java_agent";
-
-    private static final ThreadFactory DEFAULT_THREAD_FACTORY = Executors.defaultThreadFactory();
-
-    @Override
-    public Thread newThread(Runnable r) {
-        Thread thread = DEFAULT_THREAD_FACTORY.newThread(r);
-        if (thread != null) {
-            thread.setDaemon(true);
-            thread.setName(String.format("%s-%s", NAME_PREFIX, thread.getName()));
-        }
-
-        return thread;
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ArgumentUtils.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ArgumentUtils.java
deleted file mode 100644
index 6dc66c7da..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ArgumentUtils.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class ArgumentUtils {
-
-    public static boolean needToUpdateArg(String argValue) {
-        return argValue != null && !argValue.isEmpty();
-    }
-
-    public static String getArgumentSingleValue(
-        Map<String, List<String>> parsedArgs, String argName) {
-        List<String> list = parsedArgs.get(argName);
-        if (list == null) {
-            return null;
-        }
-
-        if (list.isEmpty()) {
-            return "";
-        }
-
-        return list.get(list.size() - 1);
-    }
-
-    public static List<String> getArgumentMultiValues(
-        Map<String, List<String>> parsedArgs, String argName) {
-        List<String> list = parsedArgs.get(argName);
-        if (list == null) {
-            return new ArrayList<>();
-        }
-        return list;
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Arguments.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Arguments.java
deleted file mode 100644
index d38f7ca17..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Arguments.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import org.apache.streampark.plugin.profiling.reporter.ConsoleOutputReporter;
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethod;
-import org.apache.streampark.plugin.profiling.util.ClassMethodArgument;
-import org.apache.streampark.plugin.profiling.util.DummyConfigProvider;
-import org.apache.streampark.plugin.profiling.util.ReflectionUtils;
-import org.apache.streampark.plugin.profiling.util.Utils;
-
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class Arguments {
-    public static final String DEFAULT_APP_ID_REGEX = "application_[\\w_]+";
-    public static final long DEFAULT_METRIC_INTERVAL = 60000;
-    public static final long DEFAULT_SAMPLE_INTERVAL = 100;
-
-    public static final String ARG_NOOP = "noop";
-    public static final String ARG_REPORTER = "reporter";
-    public static final String ARG_CONFIG_PROVIDER = "configProvider";
-    public static final String ARG_CONFIG_FILE = "configFile";
-    public static final String ARG_METRIC_INTERVAL = "metricInterval";
-    public static final String ARG_SAMPLE_INTERVAL = "sampleInterval";
-    public static final String ARG_TAG = "tag";
-    public static final String ARG_CLUSTER = "cluster";
-    public static final String ARG_APP_ID_VARIABLE = "appIdVariable";
-    public static final String ARG_APP_ID_REGEX = "appIdRegex";
-    public static final String ARG_DURATION_PROFILING = "durationProfiling";
-    public static final String ARG_ARGUMENT_PROFILING = "argumentProfiling";
-
-    public static final String ARG_IO_PROFILING = "ioProfiling";
-
-    public static final long MIN_INTERVAL_MILLIS = 50;
-
-    private static final AgentLogger LOGGER = AgentLogger.getLogger(Arguments.class.getName());
-
-    private final Map<String, List<String>> rawArgValues = new HashMap<>();
-
-    private boolean noop = false;
-
-    private Constructor<Reporter> reporterConstructor;
-    private Constructor<ConfigProvider> configProviderConstructor;
-    private String configFile;
-
-    private String appIdVariable;
-    private String appIdRegex = DEFAULT_APP_ID_REGEX;
-    private long metricInterval = DEFAULT_METRIC_INTERVAL;
-    private long sampleInterval = 0L;
-    private String tag;
-    private String cluster;
-    private boolean ioProfiling;
-
-    private final List<ClassAndMethod> durationProfiling = new ArrayList<>();
-    private final List<ClassMethodArgument> argumentProfiling = new ArrayList<>();
-
-    private Arguments(Map<String, List<String>> parsedArgs) {
-        doArguments(parsedArgs);
-    }
-
-    public static Arguments parseArgs(String args) {
-        if (args == null) {
-            return new Arguments(new HashMap<>());
-        }
-
-        args = args.trim();
-        if (args.isEmpty()) {
-            return new Arguments(new HashMap<>());
-        }
-
-        Map<String, List<String>> map = new HashMap<>();
-        for (String argPair : args.split(",")) {
-            String[] strs = argPair.split("=");
-            if (strs.length != 2) {
-                throw new IllegalArgumentException(
-                    "Arguments for the agent should be like: key1=value1,key2=value2");
-            }
-
-            String key = strs[0].trim();
-            if (key.isEmpty()) {
-                throw new IllegalArgumentException("Argument key should not be empty");
-            }
-
-            List<String> list = map.computeIfAbsent(key, k -> new ArrayList<>());
-            list.add(strs[1].trim());
-        }
-
-        return new Arguments(map);
-    }
-
-    public void doArguments(Map<String, List<String>> parsedArgs) {
-        rawArgValues.putAll(parsedArgs);
-
-        String argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_NOOP);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            noop = Boolean.parseBoolean(argValue);
-            LOGGER.info("Got argument value for noop: " + noop);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_REPORTER);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            reporterConstructor = ReflectionUtils.getConstructor(argValue, Reporter.class);
-            LOGGER.info("Got argument value for reporter: " + argValue);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_CONFIG_PROVIDER);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            configProviderConstructor = ReflectionUtils.getConstructor(argValue, ConfigProvider.class);
-            LOGGER.info("Got argument value for configProvider: " + argValue);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_CONFIG_FILE);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            configFile = argValue;
-            LOGGER.info("Got argument value for configFile: " + configFile);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_METRIC_INTERVAL);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            metricInterval = Long.parseLong(argValue);
-            LOGGER.info("Got argument value for metricInterval: " + metricInterval);
-        }
-
-        if (metricInterval < MIN_INTERVAL_MILLIS) {
-            throw new RuntimeException(
-                "Metric interval too short, must be at least " + Arguments.MIN_INTERVAL_MILLIS);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_SAMPLE_INTERVAL);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            sampleInterval = Long.parseLong(argValue);
-            LOGGER.info("Got argument value for sampleInterval: " + sampleInterval);
-        }
-
-        if (sampleInterval != 0 && sampleInterval < MIN_INTERVAL_MILLIS) {
-            throw new RuntimeException(
-                "Sample interval too short, must be 0 (disable sampling) or at least "
-                    + Arguments.MIN_INTERVAL_MILLIS);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_TAG);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            tag = argValue;
-            LOGGER.info("Got argument value for tag: " + tag);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_CLUSTER);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            cluster = argValue;
-            LOGGER.info("Got argument value for cluster: " + cluster);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_APP_ID_VARIABLE);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            appIdVariable = argValue;
-            LOGGER.info("Got argument value for appIdVariable: " + appIdVariable);
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_APP_ID_REGEX);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            appIdRegex = argValue;
-            LOGGER.info("Got argument value for appIdRegex: " + appIdRegex);
-        }
-
-        List<String> argValues =
-            ArgumentUtils.getArgumentMultiValues(parsedArgs, ARG_DURATION_PROFILING);
-        if (!argValues.isEmpty()) {
-            durationProfiling.clear();
-            for (String str : argValues) {
-                int index = str.lastIndexOf(".");
-                if (index <= 0 || index + 1 >= str.length()) {
-                    throw new IllegalArgumentException("Invalid argument value: " + str);
-                }
-                String className = str.substring(0, index);
-                String methodName = str.substring(index + 1);
-                ClassAndMethod classAndMethod = new ClassAndMethod(className, methodName);
-                durationProfiling.add(classAndMethod);
-                LOGGER.info("Got argument value for durationProfiling: " + classAndMethod);
-            }
-        }
-
-        argValues = ArgumentUtils.getArgumentMultiValues(parsedArgs, ARG_ARGUMENT_PROFILING);
-        if (!argValues.isEmpty()) {
-            argumentProfiling.clear();
-            for (String str : argValues) {
-                int index = str.lastIndexOf(".");
-                if (index <= 0 || index + 1 >= str.length()) {
-                    throw new IllegalArgumentException("Invalid argument value: " + str);
-                }
-                String classMethodName = str.substring(0, index);
-                int argumentIndex = Integer.parseInt(str.substring(index + 1));
-
-                index = classMethodName.lastIndexOf(".");
-                if (index <= 0 || index + 1 >= classMethodName.length()) {
-                    throw new IllegalArgumentException("Invalid argument value: " + str);
-                }
-                String className = classMethodName.substring(0, index);
-                String methodName = str.substring(index + 1, classMethodName.length());
-
-                ClassMethodArgument classMethodArgument =
-                    new ClassMethodArgument(className, methodName, argumentIndex);
-                argumentProfiling.add(classMethodArgument);
-                LOGGER.info("Got argument value for argumentProfiling: " + classMethodArgument);
-            }
-        }
-
-        argValue = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_IO_PROFILING);
-        if (ArgumentUtils.needToUpdateArg(argValue)) {
-            ioProfiling = Boolean.parseBoolean(argValue);
-            LOGGER.info("Got argument value for ioProfiling: " + ioProfiling);
-        }
-    }
-
-    public void runConfigProvider() {
-        try {
-            ConfigProvider configProvider = getConfigProvider();
-            if (configProvider != null) {
-                Map<String, Map<String, List<String>>> extraConfig = configProvider.getConfig();
-
-                // Get root level config (use empty string as key in the config map)
-                Map<String, List<String>> rootConfig = extraConfig.get("");
-                if (rootConfig != null) {
-                    doArguments(rootConfig);
-                    LOGGER.info("Updated arguments based on config: " + Utils.toJsonString(rootConfig));
-                }
-
-                // Get tag level config (use tag value to find config values in the config map)
-                if (getTag() != null && !getTag().isEmpty()) {
-                    Map<String, List<String>> overrideConfig = extraConfig.get(getTag());
-                    if (overrideConfig != null) {
-                        doArguments(overrideConfig);
-                        LOGGER.info(
-                            "Updated arguments based on config override: "
-                                + Utils.toJsonString(overrideConfig));
-                    }
-                }
-            }
-        } catch (Throwable ex) {
-            LOGGER.warn("Failed to update arguments with config provider", ex);
-        }
-    }
-
-    public Map<String, List<String>> getRawArgValues() {
-        return rawArgValues;
-    }
-
-    public Reporter getReporter() {
-        if (reporterConstructor == null) {
-            return new ConsoleOutputReporter();
-        } else {
-            try {
-                Reporter reporter = reporterConstructor.newInstance();
-                reporter.doArguments(getRawArgValues());
-                return reporter;
-            } catch (Throwable e) {
-                throw new RuntimeException(
-                    String.format(
-                        "Failed to create reporter instance %s", reporterConstructor.getDeclaringClass()),
-                    e);
-            }
-        }
-    }
-
-    public ConfigProvider getConfigProvider() {
-        if (configProviderConstructor == null) {
-            return new DummyConfigProvider();
-        } else {
-            try {
-                ConfigProvider configProvider = configProviderConstructor.newInstance();
-                if (configProvider instanceof YamlConfigProvider) {
-                    if (configFile == null || configFile.isEmpty()) {
-                        throw new RuntimeException(
-                            "Argument configFile is empty, cannot use " + configProvider.getClass());
-                    }
-                    ((YamlConfigProvider) configProvider).setFilePath(configFile);
-                    return configProvider;
-                }
-                return configProvider;
-            } catch (Throwable e) {
-                throw new RuntimeException(
-                    String.format(
-                        "Failed to create config provider instance %s",
-                        configProviderConstructor.getDeclaringClass()),
-                    e);
-            }
-        }
-    }
-
-    public boolean isNoop() {
-        return noop;
-    }
-
-    public void setReporter(String className) {
-        reporterConstructor = ReflectionUtils.getConstructor(className, Reporter.class);
-    }
-
-    public void setConfigProvider(String className) {
-        configProviderConstructor = ReflectionUtils.getConstructor(className, ConfigProvider.class);
-    }
-
-    public long getMetricInterval() {
-        return metricInterval;
-    }
-
-    public long getSampleInterval() {
-        return sampleInterval;
-    }
-
-    public String getTag() {
-        return tag;
-    }
-
-    public String getCluster() {
-        return cluster;
-    }
-
-    public String getAppIdVariable() {
-        return appIdVariable;
-    }
-
-    public void setAppIdVariable(String appIdVariable) {
-        this.appIdVariable = appIdVariable;
-    }
-
-    public String getAppIdRegex() {
-        return appIdRegex;
-    }
-
-    public List<ClassAndMethod> getDurationProfiling() {
-        return durationProfiling;
-    }
-
-    public List<ClassMethodArgument> getArgumentProfiling() {
-        return argumentProfiling;
-    }
-
-    public boolean isIoProfiling() {
-        return ioProfiling;
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ConfigProvider.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ConfigProvider.java
deleted file mode 100644
index f74c407d2..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ConfigProvider.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import java.util.List;
-import java.util.Map;
-
-public interface ConfigProvider {
-    /**
-     * * Returns a map containing multiple child maps. Each child map contains a group of key/value
-     * pairs for a specific jvm profiler user (identified by tag value when start the profiler). The
-     * child map for empty tag value contains the default configuration for all profilers.
-     *
-     * @return
-     */
-    Map<String, Map<String, List<String>>> getConfig();
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Profiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Profiler.java
deleted file mode 100644
index 4ccf135e4..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Profiler.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-public interface Profiler {
-    /**
-     * @return
-     */
-    long getInterval();
-
-    /**
-     * @param reporter
-     */
-    void setReporter(Reporter reporter);
-
-    /**
-     *
-     */
-    void profile();
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ProfilerGroup.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ProfilerGroup.java
deleted file mode 100644
index dcda7b725..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ProfilerGroup.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ProfilerGroup {
-    private final List<Profiler> oneTimeProfilers;
-    private final List<Profiler> periodicProfilers;
-
-    public ProfilerGroup(List<Profiler> oneTimeProfilers, List<Profiler> periodicProfilers) {
-        this.oneTimeProfilers = new ArrayList<>(oneTimeProfilers);
-        this.periodicProfilers = new ArrayList<>(periodicProfilers);
-    }
-
-    public List<Profiler> getOneTimeProfilers() {
-        return oneTimeProfilers;
-    }
-
-    public List<Profiler> getPeriodicProfilers() {
-        return periodicProfilers;
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ProfilerRunner.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ProfilerRunner.java
deleted file mode 100644
index d75194318..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ProfilerRunner.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-public class ProfilerRunner implements Runnable {
-    private static final AgentLogger LOGGER = AgentLogger.getLogger(ProfilerRunner.class.getName());
-
-    private static final int MAX_ERROR_COUNT_TO_LOG = 100;
-
-    private final Profiler profiler;
-    private static final AtomicLong ERROR_COUNTER = new AtomicLong(0);
-
-    public ProfilerRunner(Profiler profiler) {
-        this.profiler = profiler;
-    }
-
-    @Override
-    public void run() {
-        try {
-            profiler.profile();
-        } catch (Throwable e) {
-            long errorCountValue = ERROR_COUNTER.incrementAndGet();
-            if (errorCountValue <= MAX_ERROR_COUNT_TO_LOG) {
-                LOGGER.warn("Failed to run profile: " + profiler, e);
-            } else {
-                e.printStackTrace();
-            }
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Reporter.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Reporter.java
deleted file mode 100644
index e87e7c867..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/Reporter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import java.util.List;
-import java.util.Map;
-
-public interface Reporter {
-
-    default void doArguments(Map<String, List<String>> parsedArgs) {
-    }
-
-    void report(String profilerName, Map<String, Object> metrics);
-
-    void close();
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ShutdownHookRunner.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ShutdownHookRunner.java
deleted file mode 100644
index 8f7c96e0b..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/ShutdownHookRunner.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-public class ShutdownHookRunner implements Runnable {
-    private static final AgentLogger LOGGER = AgentLogger.getLogger(ShutdownHookRunner.class.getName());
-
-    private final List<Profiler> profilers;
-    private final List<Reporter> reporters;
-    private final List<AutoCloseable> closeables;
-
-    public ShutdownHookRunner(
-        Collection<Profiler> profilers,
-        Collection<Reporter> reporters,
-        Collection<AutoCloseable> objectsToCloseOnShutdown) {
-        this.profilers = profilers == null ? new ArrayList<>() : new ArrayList<>(profilers);
-        this.reporters = reporters == null ? new ArrayList<>() : new ArrayList<>(reporters);
-        this.closeables =
-            objectsToCloseOnShutdown == null ? new ArrayList<>() : new ArrayList<>(objectsToCloseOnShutdown);
-    }
-
-    @Override
-    public void run() {
-        logShutdownMessage("Running java agent shutdown");
-
-        for (Profiler profiler : profilers) {
-            try {
-                logShutdownMessage("Running periodic profiler (last run): " + profiler);
-                profiler.profile();
-                logShutdownMessage("Ran periodic profiler (last run): " + profiler);
-            } catch (Throwable ex) {
-                LOGGER.warn("Failed to run periodic profiler (last run): " + profiler, ex);
-            }
-        }
-
-        for (Reporter r : reporters) {
-            try {
-                logShutdownMessage("Closing reporter " + r);
-                r.close();
-                logShutdownMessage("Closed reporter " + r);
-            } catch (Throwable ex) {
-                LOGGER.warn(
-                    "Failed to close reporter " + r + ", " + new Date() + ", " + System.currentTimeMillis(),
-                    ex);
-            }
-        }
-
-        for (AutoCloseable closeable : closeables) {
-            // Do not use logger.warn here because the logger may depend on error log reporter which will
-            // be already closed here.
-            // So we use logShutdownMessage (System.out.println) to print out logs.
-            try {
-                logShutdownMessage("Closing object " + closeable);
-                closeable.close();
-                logShutdownMessage("Closed object " + closeable);
-            } catch (Throwable ex) {
-                logShutdownMessage("Failed to close object " + closeable);
-                ex.printStackTrace();
-            }
-        }
-    }
-
-    private void logShutdownMessage(String msg) {
-        // Sometime spark log in console output seems not fully collected, thus log to error output as
-        // well to make sure
-        // we capture this shutdown hook execution. This is to help debug some issue when shutdown hook
-        // seems not executed.
-        String log = System.currentTimeMillis() + " " + msg;
-        System.out.println(log);
-        System.err.println(log);
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/YamlConfigProvider.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/YamlConfigProvider.java
deleted file mode 100644
index 5d7b24f73..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/YamlConfigProvider.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling;
-
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-import org.apache.streampark.plugin.profiling.util.ExponentialBackoffRetryPolicy;
-import org.apache.streampark.plugin.profiling.util.Utils;
-
-import org.yaml.snakeyaml.Yaml;
-import scalaj.http.Http;
-import scalaj.http.HttpResponse;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class YamlConfigProvider implements ConfigProvider {
-    private static final AgentLogger LOGGER =
-        AgentLogger.getLogger(YamlConfigProvider.class.getName());
-
-    private static final String OVERRIDE_KEY = "override";
-
-    private String filePath;
-
-    public YamlConfigProvider() {
-    }
-
-    public YamlConfigProvider(String filePath) {
-        setFilePath(filePath);
-    }
-
-    public void setFilePath(String filePath) {
-        if (filePath == null || filePath.isEmpty()) {
-            throw new IllegalArgumentException("filePath cannot be null or empty");
-        }
-
-        this.filePath = filePath;
-    }
-
-    @Override
-    public Map<String, Map<String, List<String>>> getConfig() {
-        return getConfig(filePath);
-    }
-
-    private static Map<String, Map<String, List<String>>> getConfig(String configFilePathOrUrl) {
-        if (configFilePathOrUrl == null || configFilePathOrUrl.isEmpty()) {
-            LOGGER.warn("Empty YAML config file path");
-            return new HashMap<>();
-        }
-
-        byte[] bytes;
-
-        try {
-            bytes =
-                new ExponentialBackoffRetryPolicy<byte[]>(3, 100)
-                    .attempt(
-                        () -> {
-                            String filePathLowerCase = configFilePathOrUrl.toLowerCase();
-                            if (filePathLowerCase.startsWith("http://")
-                                || filePathLowerCase.startsWith("https://")) {
-                                return getHttp(configFilePathOrUrl);
-                            } else {
-                                return Files.readAllBytes(Paths.get(configFilePathOrUrl));
-                            }
-                        });
-
-            LOGGER.info("Read YAML config from: " + configFilePathOrUrl);
-        } catch (Throwable e) {
-            LOGGER.warn("Failed to read file: " + configFilePathOrUrl, e);
-            return new HashMap<>();
-        }
-
-        if (bytes == null || bytes.length == 0) {
-            return new HashMap<>();
-        }
-
-        Map<String, Map<String, List<String>>> result = new HashMap<>();
-
-        try {
-            try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
-                Yaml yaml = new Yaml();
-                Object yamlObj = yaml.load(stream);
-
-                if (!(yamlObj instanceof Map)) {
-                    LOGGER.warn("Invalid YAML config content: " + yamlObj);
-                    return result;
-                }
-
-                Map yamlMap = (Map) yamlObj;
-
-                Map overrideMap = null;
-
-                for (Object key : yamlMap.keySet()) {
-                    String configKey = key.toString();
-                    Object valueObj = yamlMap.get(key);
-                    if (valueObj == null) {
-                        continue;
-                    }
-
-                    if (configKey.equals(OVERRIDE_KEY)) {
-                        if (valueObj instanceof Map) {
-                            overrideMap = (Map) valueObj;
-                        } else {
-                            LOGGER.warn("Invalid override property: " + valueObj);
-                        }
-                    } else {
-                        addConfig(result, "", configKey, valueObj);
-                    }
-                }
-
-                if (overrideMap != null) {
-                    for (Object key : overrideMap.keySet()) {
-                        String overrideKey = key.toString();
-                        Object valueObj = overrideMap.get(key);
-                        if (valueObj == null) {
-                            continue;
-                        }
-
-                        if (!(valueObj instanceof Map)) {
-                            LOGGER.warn("Invalid override section: " + key + ": " + valueObj);
-                            continue;
-                        }
-
-                        Map<Object, Object> overrideValues = (Map<Object, Object>) valueObj;
-                        for (Map.Entry<Object, Object> entry : overrideValues.entrySet()) {
-                            if (entry.getValue() == null) {
-                                continue;
-                            }
-                            String configKey = entry.getKey().toString();
-                            addConfig(result, overrideKey, configKey, entry.getValue());
-                        }
-                    }
-                }
-
-                return result;
-            }
-        } catch (Throwable e) {
-            LOGGER.warn("Failed to read config file: " + configFilePathOrUrl, e);
-            return new HashMap<>();
-        }
-    }
-
-    private static void addConfig(
-        Map<String, Map<String, List<String>>> config, String override, String key, Object value) {
-        Map<String, List<String>> configMap = config.computeIfAbsent(override, k -> new HashMap<>());
-
-        if (value instanceof List) {
-            List<String> configValueList = configMap.computeIfAbsent(key, k -> new ArrayList<>());
-            for (Object entry : (List) value) {
-                configValueList.add(entry.toString());
-            }
-        } else if (value instanceof Object[]) {
-            List<String> configValueList = configMap.computeIfAbsent(key, k -> new ArrayList<>());
-            for (Object entry : (Object[]) value) {
-                configValueList.add(entry.toString());
-            }
-        } else if (value instanceof Map) {
-            for (Object mapKey : ((Map) value).keySet()) {
-                String propKey = mapKey.toString();
-                Object propValue = ((Map) value).get(propKey);
-                if (propValue != null) {
-                    addConfig(config, override, key + "." + propKey, propValue);
-                }
-            }
-        } else {
-            List<String> configValueList = configMap.computeIfAbsent(key, k -> new ArrayList<>());
-            configValueList.add(value.toString());
-        }
-    }
-
-    private static byte[] getHttp(String url) {
-        try {
-            LOGGER.debug(String.format("Getting url: %s", url));
-            HttpResponse response = Http.apply(url).timeout(1000, 5000).asString();
-            if (response.isError()) {
-                throw new RuntimeException(
-                    "Failed response from url: " + url + ", response code: " + response.code());
-            }
-            return Utils.toByteArray((InputStream) response.body());
-        } catch (Throwable ex) {
-            throw new RuntimeException("Failed getting url: " + url, ex);
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/example/HelloWorldApplication.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/example/HelloWorldApplication.java
deleted file mode 100644
index c6cceb248..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/example/HelloWorldApplication.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.example;
-
-import java.util.Random;
-import java.util.concurrent.atomic.AtomicLong;
-
-public class HelloWorldApplication {
-
-    /**
-     * This application could be used to test the java agent. For example, you could run it with
-     * following argument:
-     * -javaagent:target/jvm-profiler-1.0.0.jar=reporter=org.apache.streampark.plugin.profiling.reporter.ConsoleOutputReporter,tag=tag1,metricInterval=10000,durationProfiling=org.apache.streampark.plugin.profiling.example.HelloWorldApplication.*
-     */
-    public static void main(String[] args) throws Throwable {
-        long totalRunningMillis = 60 * 1000;
-        long sleepMillis = 1000;
-
-        if (args.length >= 1) {
-            totalRunningMillis = Long.parseLong(args[0]);
-        }
-
-        if (args.length >= 2) {
-            sleepMillis = Long.parseLong(args[1]);
-        }
-
-        long startMillis = System.currentTimeMillis();
-        long lastPrintMillis = 0;
-
-        Random random = new Random();
-
-        while (System.currentTimeMillis() - startMillis < totalRunningMillis) {
-            if (System.currentTimeMillis() - lastPrintMillis >= 10000) {
-                lastPrintMillis = System.currentTimeMillis();
-            }
-
-            sleepMillis += random.nextInt(100);
-            sleepMillis -= random.nextInt(100);
-
-            privateSleepMethod(sleepMillis);
-
-            AtomicLong atomicLong = new AtomicLong(sleepMillis);
-            publicSleepMethod(atomicLong);
-        }
-    }
-
-    private static void privateSleepMethod(long millis) {
-        try {
-            Thread.sleep(millis);
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public static void publicSleepMethod(AtomicLong millis) {
-        try {
-            Thread.sleep(millis.get());
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/Constants.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/Constants.java
deleted file mode 100644
index 942114517..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/Constants.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-public class Constants {
-    public static final long DEFAULT_METRIC_INTERVAL = 60000;
-
-    public static final int MAX_STRING_LENGTH = 800000;
-
-    public static final String EXECUTOR_ROLE = "executor";
-    public static final String DRIVER_ROLE = "driver";
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/CpuAndMemoryProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/CpuAndMemoryProfiler.java
deleted file mode 100644
index 332811019..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/CpuAndMemoryProfiler.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-import org.apache.streampark.plugin.profiling.util.ProcFileUtils;
-
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-import java.lang.management.BufferPoolMXBean;
-import java.lang.management.GarbageCollectorMXBean;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-import java.lang.management.MemoryPoolMXBean;
-import java.lang.management.MemoryUsage;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class CpuAndMemoryProfiler extends ProfilerBase implements Profiler {
-    public static final String PROFILER_NAME = "CpuAndMemory";
-
-    private static final AgentLogger LOGGER =
-        AgentLogger.getLogger(CpuAndMemoryProfiler.class.getName());
-
-    private static final String ATTRIBUTE_NAME_PROCESS_CPU_LOAD = "ProcessCpuLoad";
-    private static final int ATTRIBUTE_INDEX_PROCESS_CPU_LOAD = 0;
-
-    private static final String ATTRIBUTE_NAME_SYSTEM_CPU_LOAD = "SystemCpuLoad";
-    private static final int ATTRIBUTE_INDEX_SYSTEM_CPU_LOAD = 1;
-
-    private static final String ATTRIBUTE_NAME_PROCESS_CPU_TIME = "ProcessCpuTime";
-    private static final int ATTRIBUTE_INDEX_PROCESS_CPU_TIME = 2;
-
-    private long interval = Constants.DEFAULT_METRIC_INTERVAL;
-
-    private MBeanServer platformMBeanServer;
-    private ObjectName operatingSystemObjectName;
-
-    private MemoryMXBean memoryMXBean;
-
-    private Reporter reporter;
-
-    public CpuAndMemoryProfiler(Reporter reporter) {
-        setReporter(reporter);
-
-        init();
-    }
-
-    @Override
-    public long getInterval() {
-        return interval;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-        this.reporter = reporter;
-    }
-
-    @Override
-    public synchronized void profile() {
-        Double processCpuLoad = null;
-        Double systemCpuLoad = null;
-        Long processCpuTime = null;
-
-        AttributeList cpuAttributes = getCpuAttributes();
-        if (cpuAttributes != null && cpuAttributes.size() > 0) {
-            Attribute att = (Attribute) cpuAttributes.get(ATTRIBUTE_INDEX_PROCESS_CPU_LOAD);
-            processCpuLoad = (Double) att.getValue();
-            if (processCpuLoad == Double.NaN) {
-                processCpuLoad = null;
-            }
-
-            att = (Attribute) cpuAttributes.get(ATTRIBUTE_INDEX_SYSTEM_CPU_LOAD);
-            systemCpuLoad = (Double) att.getValue();
-            if (systemCpuLoad == Double.NaN) {
-                systemCpuLoad = null;
-            }
-
-            att = (Attribute) cpuAttributes.get(ATTRIBUTE_INDEX_PROCESS_CPU_TIME);
-            processCpuTime = (Long) att.getValue();
-        }
-
-        Double heapMemoryTotalUsed = null;
-        Double heapMemoryCommitted = null;
-        Double heapMemoryMax = null;
-
-        Double nonHeapMemoryTotalUsed = null;
-        Double nonHeapMemoryCommitted = null;
-        Double nonHeapMemoryMax = null;
-
-        if (memoryMXBean != null) {
-            MemoryUsage memoryUsage = memoryMXBean.getHeapMemoryUsage();
-            heapMemoryTotalUsed = new Double(memoryUsage.getUsed());
-            heapMemoryCommitted = new Double(memoryUsage.getCommitted());
-            heapMemoryMax = new Double(memoryUsage.getMax());
-
-            memoryUsage = memoryMXBean.getNonHeapMemoryUsage();
-            nonHeapMemoryTotalUsed = new Double(memoryUsage.getUsed());
-            nonHeapMemoryCommitted = new Double(memoryUsage.getCommitted());
-            nonHeapMemoryMax = new Double(memoryUsage.getMax());
-        }
-
-        List<Map<String, Object>> gcMetrics = new ArrayList<>();
-
-        List<GarbageCollectorMXBean> gcMXBeans = ManagementFactory.getGarbageCollectorMXBeans();
-
-        if (gcMXBeans != null) {
-            for (GarbageCollectorMXBean gcMXBean : gcMXBeans) {
-                Map<String, Object> gcMap = new HashMap<>();
-                gcMap.put("name", gcMXBean.getName());
-                gcMap.put("collectionCount", Long.valueOf(gcMXBean.getCollectionCount()));
-                gcMap.put("collectionTime", Long.valueOf(gcMXBean.getCollectionTime()));
-
-                gcMetrics.add(gcMap);
-            }
-        }
-
-        List<Map<String, Object>> memoryPoolsMetrics = new ArrayList<>();
-
-        for (MemoryPoolMXBean pool : ManagementFactory.getMemoryPoolMXBeans()) {
-            Map<String, Object> memoryPoolMap = new HashMap<>();
-
-            memoryPoolMap.put("name", pool.getName());
-            memoryPoolMap.put("type", pool.getType().toString());
-            memoryPoolMap.put("usageCommitted", pool.getUsage().getCommitted());
-            memoryPoolMap.put("usageMax", pool.getUsage().getMax());
-            memoryPoolMap.put("usageUsed", pool.getUsage().getUsed());
-            memoryPoolMap.put("peakUsageCommitted", pool.getPeakUsage().getCommitted());
-            memoryPoolMap.put("peakUsageMax", pool.getPeakUsage().getMax());
-            memoryPoolMap.put("peakUsageUsed", pool.getPeakUsage().getUsed());
-
-            memoryPoolsMetrics.add(memoryPoolMap);
-        }
-
-        List<Map<String, Object>> bufferPoolsMetrics = new ArrayList<>();
-
-        List<BufferPoolMXBean> bufferPools =
-            ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
-        if (bufferPools != null) {
-            for (BufferPoolMXBean pool : bufferPools) {
-                Map<String, Object> bufferPoolMap = new HashMap<>();
-
-                bufferPoolMap.put("name", pool.getName());
-                bufferPoolMap.put("count", Long.valueOf(pool.getCount()));
-                bufferPoolMap.put("memoryUsed", Long.valueOf(pool.getMemoryUsed()));
-                bufferPoolMap.put("totalCapacity", Long.valueOf(pool.getTotalCapacity()));
-
-                bufferPoolsMetrics.add(bufferPoolMap);
-            }
-        }
-
-        // See http://man7.org/linux/man-pages/man5/proc.5.html for details about proc status
-        Map<String, String> procStatus = ProcFileUtils.getProcStatus();
-        Long procStatusVmRSS = ProcFileUtils.getBytesValue(procStatus, "VmRSS");
-        Long procStatusVmHWM = ProcFileUtils.getBytesValue(procStatus, "VmHWM");
-        Long procStatusVmSize = ProcFileUtils.getBytesValue(procStatus, "VmSize");
-        Long procStatusVmPeak = ProcFileUtils.getBytesValue(procStatus, "VmPeak");
-
-        Map<String, Object> map = new HashMap<String, Object>();
-
-        map.put("epochMillis", System.currentTimeMillis());
-        map.put("name", getProcessName());
-        map.put("host", getHostName());
-        map.put("processUuid", getProcessUuid());
-        map.put("appId", getAppId());
-
-        if (getTag() != null) {
-            map.put("tag", getTag());
-        }
-
-        if (getCluster() != null) {
-            map.put("cluster", getCluster());
-        }
-
-        if (getRole() != null) {
-            map.put("role", getRole());
-        }
-
-        map.put("processCpuLoad", processCpuLoad);
-        map.put("systemCpuLoad", systemCpuLoad);
-        map.put("processCpuTime", processCpuTime);
-
-        map.put("heapMemoryTotalUsed", heapMemoryTotalUsed);
-        map.put("heapMemoryCommitted", heapMemoryCommitted);
-        map.put("heapMemoryMax", heapMemoryMax);
-
-        map.put("nonHeapMemoryTotalUsed", nonHeapMemoryTotalUsed);
-        map.put("nonHeapMemoryCommitted", nonHeapMemoryCommitted);
-        map.put("nonHeapMemoryMax", nonHeapMemoryMax);
-
-        map.put("gc", gcMetrics);
-
-        map.put("memoryPools", memoryPoolsMetrics);
-        map.put("bufferPools", bufferPoolsMetrics);
-
-        if (procStatusVmRSS != null) {
-            map.put("vmRSS", procStatusVmRSS);
-        }
-        if (procStatusVmHWM != null) {
-            map.put("vmHWM", procStatusVmHWM);
-        }
-        if (procStatusVmSize != null) {
-            map.put("vmSize", procStatusVmSize);
-        }
-        if (procStatusVmPeak != null) {
-            map.put("vmPeak", procStatusVmPeak);
-        }
-
-        if (reporter != null) {
-            reporter.report(PROFILER_NAME, map);
-        }
-    }
-
-    private void init() {
-        try {
-            platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
-            operatingSystemObjectName = ObjectName.getInstance("java.lang:type=OperatingSystem");
-        } catch (Throwable ex) {
-            LOGGER.warn("Failed to get Operation System MBean", ex);
-        }
-
-        try {
-            memoryMXBean = ManagementFactory.getMemoryMXBean();
-        } catch (Throwable ex) {
-            LOGGER.warn("Failed to get Memory MBean", ex);
-        }
-    }
-
-    private AttributeList getCpuAttributes() {
-        try {
-            String[] names =
-                new String[]{
-                    ATTRIBUTE_NAME_PROCESS_CPU_LOAD,
-                    ATTRIBUTE_NAME_SYSTEM_CPU_LOAD,
-                    ATTRIBUTE_NAME_PROCESS_CPU_TIME
-                };
-            AttributeList list = platformMBeanServer.getAttributes(operatingSystemObjectName, names);
-            if (list.size() != names.length) {
-                LOGGER.warn("Failed to get all attributes");
-                return new AttributeList();
-            }
-            return list;
-        } catch (Throwable ex) {
-            LOGGER.warn("Failed to get CPU MBean attributes", ex);
-            return null;
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/IOProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/IOProfiler.java
deleted file mode 100644
index c68e02be3..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/IOProfiler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.util.ProcFileUtils;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class IOProfiler extends ProfilerBase implements Profiler {
-    public static final String PROFILER_NAME = "IO";
-
-    private long interval = Constants.DEFAULT_METRIC_INTERVAL;
-
-    private Reporter reporter;
-
-    public IOProfiler(Reporter reporter) {
-        setReporter(reporter);
-    }
-
-    @Override
-    public long getInterval() {
-        return interval;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-        this.reporter = reporter;
-    }
-
-    @Override
-    public synchronized void profile() {
-        // See http://man7.org/linux/man-pages/man5/proc.5.html for details about /proc/[pid]/io
-        Map<String, String> procMap = ProcFileUtils.getProcIO();
-        Long rchar = ProcFileUtils.getBytesValue(procMap, "rchar");
-        Long wchar = ProcFileUtils.getBytesValue(procMap, "wchar");
-        Long readBytes = ProcFileUtils.getBytesValue(procMap, "read_bytes");
-        Long writeBytes = ProcFileUtils.getBytesValue(procMap, "write_bytes");
-
-        List<Map<String, Object>> cpuTime = ProcFileUtils.getProcStatCpuTime();
-
-        Map<String, Object> map = new HashMap<>();
-
-        map.put("epochMillis", System.currentTimeMillis());
-        map.put("name", getProcessName());
-        map.put("host", getHostName());
-        map.put("processUuid", getProcessUuid());
-        map.put("appId", getAppId());
-
-        if (getTag() != null) {
-            map.put("tag", getTag());
-        }
-
-        if (getCluster() != null) {
-            map.put("cluster", getCluster());
-        }
-
-        if (getRole() != null) {
-            map.put("role", getRole());
-        }
-
-        Map<String, Object> selfMap = new HashMap<String, Object>();
-        map.put("self", selfMap);
-
-        Map<String, Object> ioMap = new HashMap<String, Object>();
-        selfMap.put("io", ioMap);
-
-        ioMap.put("rchar", rchar);
-        ioMap.put("wchar", wchar);
-        ioMap.put("read_bytes", readBytes);
-        ioMap.put("write_bytes", writeBytes);
-
-        map.put("stat", cpuTime);
-
-        if (reporter != null) {
-            reporter.report(PROFILER_NAME, map);
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodArgumentCollector.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodArgumentCollector.java
deleted file mode 100644
index b4b07c66f..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodArgumentCollector.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.util.ClassMethodArgumentMetricBuffer;
-
-public class MethodArgumentCollector {
-    private final ClassMethodArgumentMetricBuffer buffer;
-
-    public MethodArgumentCollector(ClassMethodArgumentMetricBuffer buffer) {
-        this.buffer = buffer;
-    }
-
-    public void collectMetric(String className, String methodName, String argument) {
-        if (argument == null) {
-            argument = "";
-        }
-
-        if (argument.length() > Constants.MAX_STRING_LENGTH) {
-            argument = argument.substring(0, Constants.MAX_STRING_LENGTH);
-        }
-
-        buffer.appendValue(className, methodName, argument);
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodArgumentProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodArgumentProfiler.java
deleted file mode 100644
index dc11dbd60..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodArgumentProfiler.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.reporter.ConsoleOutputReporter;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethodMetricKey;
-import org.apache.streampark.plugin.profiling.util.ClassMethodArgumentMetricBuffer;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
-
-public class MethodArgumentProfiler extends ProfilerBase implements Profiler {
-    public static final String PROFILER_NAME = "MethodArgument";
-
-    private final ClassMethodArgumentMetricBuffer buffer;
-
-    private Reporter reporter = new ConsoleOutputReporter();
-
-    private long interval = Constants.DEFAULT_METRIC_INTERVAL;
-
-    public MethodArgumentProfiler(ClassMethodArgumentMetricBuffer buffer, Reporter reporter) {
-        this.buffer = buffer;
-        this.reporter = reporter;
-    }
-
-    @Override
-    public long getInterval() {
-        return interval;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-        this.reporter = reporter;
-    }
-
-    @Override
-    public void profile() {
-        if (buffer == null) {
-            return;
-        }
-
-        if (reporter == null) {
-            return;
-        }
-
-        Map<ClassAndMethodMetricKey, AtomicLong> metrics = buffer.reset();
-
-        long epochMillis = System.currentTimeMillis();
-
-        for (Map.Entry<ClassAndMethodMetricKey, AtomicLong> entry : metrics.entrySet()) {
-            Map<String, Object> commonMap = new HashMap<>();
-
-            commonMap.put("epochMillis", epochMillis);
-            commonMap.put("processName", getProcessName());
-            commonMap.put("host", getHostName());
-            commonMap.put("processUuid", getProcessUuid());
-            commonMap.put("appId", getAppId());
-
-            commonMap.put("className", entry.getKey().getClassName());
-            commonMap.put("methodName", entry.getKey().getMethodName());
-
-            if (getTag() != null) {
-                commonMap.put("tag", getTag());
-            }
-
-            if (getCluster() != null) {
-                commonMap.put("cluster", getCluster());
-            }
-
-            if (getRole() != null) {
-                commonMap.put("role", getRole());
-            }
-
-            {
-                Map<String, Object> metricMap = new HashMap<>(commonMap);
-                metricMap.put("metricName", entry.getKey().getMetricName());
-                metricMap.put("metricValue", (double) entry.getValue().get());
-                reporter.report(PROFILER_NAME, metricMap);
-            }
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodDurationCollector.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodDurationCollector.java
deleted file mode 100644
index 14ae03d62..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodDurationCollector.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.util.ClassAndMethodLongMetricBuffer;
-
-public class MethodDurationCollector {
-    private final ClassAndMethodLongMetricBuffer buffer;
-
-    public MethodDurationCollector(ClassAndMethodLongMetricBuffer buffer) {
-        this.buffer = buffer;
-    }
-
-    public void collectLongMetric(
-        String className, String methodName, String metricName, long metricValue) {
-        buffer.appendValue(className, methodName, metricName, metricValue);
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodDurationProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodDurationProfiler.java
deleted file mode 100644
index 2eb8dc8ef..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/MethodDurationProfiler.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.reporter.ConsoleOutputReporter;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethodLongMetricBuffer;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethodMetricKey;
-import org.apache.streampark.plugin.profiling.util.Histogram;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class MethodDurationProfiler extends ProfilerBase implements Profiler {
-    public static final String PROFILER_NAME = "MethodDuration";
-
-    private final ClassAndMethodLongMetricBuffer buffer;
-
-    private Reporter reporter = new ConsoleOutputReporter();
-
-    private long interval = Constants.DEFAULT_METRIC_INTERVAL;
-
-    public MethodDurationProfiler(ClassAndMethodLongMetricBuffer buffer, Reporter reporter) {
-        this.buffer = buffer;
-        this.reporter = reporter;
-    }
-
-    @Override
-    public long getInterval() {
-        return interval;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-        this.reporter = reporter;
-    }
-
-    @Override
-    public void profile() {
-        if (buffer == null) {
-            return;
-        }
-
-        if (reporter == null) {
-            return;
-        }
-
-        Map<ClassAndMethodMetricKey, Histogram> metrics = buffer.reset();
-
-        long epochMillis = System.currentTimeMillis();
-
-        for (Map.Entry<ClassAndMethodMetricKey, Histogram> entry : metrics.entrySet()) {
-            Map<String, Object> commonMap = new HashMap<>();
-
-            commonMap.put("epochMillis", epochMillis);
-            commonMap.put("processName", getProcessName());
-            commonMap.put("host", getHostName());
-            commonMap.put("processUuid", getProcessUuid());
-            commonMap.put("appId", getAppId());
-
-            commonMap.put("className", entry.getKey().getClassName());
-            commonMap.put("methodName", entry.getKey().getMethodName());
-
-            if (getTag() != null) {
-                commonMap.put("tag", getTag());
-            }
-
-            if (getCluster() != null) {
-                commonMap.put("cluster", getCluster());
-            }
-
-            if (getRole() != null) {
-                commonMap.put("role", getRole());
-            }
-
-            {
-                Map<String, Object> metricMap = new HashMap<>(commonMap);
-                metricMap.put("metricName", entry.getKey().getMetricName() + ".count");
-                metricMap.put("metricValue", (double) entry.getValue().getCount());
-                reporter.report(PROFILER_NAME, metricMap);
-            }
-            {
-                Map<String, Object> metricMap = new HashMap<>(commonMap);
-                metricMap.put("metricName", entry.getKey().getMetricName() + ".sum");
-                metricMap.put("metricValue", (double) entry.getValue().getSum());
-                reporter.report(PROFILER_NAME, metricMap);
-            }
-            {
-                Map<String, Object> metricMap = new HashMap<>(commonMap);
-                metricMap.put("metricName", entry.getKey().getMetricName() + ".min");
-                metricMap.put("metricValue", (double) entry.getValue().getMin());
-                reporter.report(PROFILER_NAME, metricMap);
-            }
-            {
-                Map<String, Object> metricMap = new HashMap<>(commonMap);
-                metricMap.put("metricName", entry.getKey().getMetricName() + ".max");
-                metricMap.put("metricValue", (double) entry.getValue().getMax());
-                reporter.report(PROFILER_NAME, metricMap);
-            }
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ProcessInfoProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ProcessInfoProfiler.java
deleted file mode 100644
index 1182142de..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ProcessInfoProfiler.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.AgentImpl;
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.util.ProcFileUtils;
-import org.apache.streampark.plugin.profiling.util.ProcessUtils;
-import org.apache.streampark.plugin.profiling.util.SparkAppCmdInfo;
-import org.apache.streampark.plugin.profiling.util.SparkUtils;
-
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ProcessInfoProfiler extends ProfilerBase implements Profiler {
-    public static final String PROFILER_NAME = "ProcessInfo";
-
-    private String jvmInputArguments = "";
-    private String jvmClassPath = "";
-    private Long jvmXmxBytes = null;
-    private String cmdline = "";
-
-    private Reporter reporter;
-
-    public ProcessInfoProfiler(Reporter reporter) {
-        setReporter(reporter);
-
-        init();
-    }
-
-    @Override
-    public long getInterval() {
-        return 0;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-        this.reporter = reporter;
-    }
-
-    @Override
-    public void profile() {
-        Map<String, Object> map = new HashMap<String, Object>();
-
-        map.put("agentVersion", AgentImpl.VERSION);
-
-        map.put("epochMillis", System.currentTimeMillis());
-        map.put("name", getProcessName());
-        map.put("host", getHostName());
-        map.put("processUuid", getProcessUuid());
-        map.put("appId", getAppId());
-
-        if (getTag() != null) {
-            map.put("tag", getTag());
-        }
-
-        if (getCluster() != null) {
-            map.put("cluster", getCluster());
-        }
-
-        // TODO support non spark application
-        // TODO also possible to use SparkContext to get spark jar/class info
-
-        SparkAppCmdInfo cmdInfo = SparkUtils.probeCmdInfo();
-        if (cmdInfo != null) {
-            map.put("appJar", cmdInfo.getAppJar());
-            map.put("appClass", cmdInfo.getAppClass());
-
-            // TODO add app arguments
-        }
-
-        if (getRole() != null) {
-            map.put("role", getRole());
-        }
-
-        if (jvmXmxBytes != null) {
-            map.put("xmxBytes", jvmXmxBytes);
-        }
-
-        String jvmInputArgumentsToReport = jvmInputArguments;
-        String jvmClassPathToReport = jvmClassPath;
-
-        // Do not report jvmInputArguments and jvmClassPath if cmdline is not empty.
-        // This is because cmdline will contain duplicate information for
-        // jvmInputArguments/jvmClassPath.
-        if (!cmdline.isEmpty()) {
-            jvmInputArgumentsToReport = "";
-            jvmClassPathToReport = "";
-        }
-
-        if (jvmInputArgumentsToReport.length() + jvmClassPathToReport.length() + cmdline.length() <= Constants.MAX_STRING_LENGTH) {
-            map.put("jvmInputArguments", jvmInputArgumentsToReport);
-            map.put("jvmClassPath", jvmClassPathToReport);
-            map.put("cmdline", cmdline);
-
-            if (reporter != null) {
-                reporter.report(PROFILER_NAME, map);
-            }
-        } else {
-            List<String> jvmInputArgumentsFragements =
-                org.apache.streampark.plugin.profiling.util.StringUtils.splitByLength(
-                    jvmInputArgumentsToReport, Constants.MAX_STRING_LENGTH);
-            List<String> jvmClassPathFragements =
-                org.apache.streampark.plugin.profiling.util.StringUtils.splitByLength(
-                    jvmClassPathToReport, Constants.MAX_STRING_LENGTH);
-            List<String> cmdlineFragements =
-                org.apache.streampark.plugin.profiling.util.StringUtils.splitByLength(
-                    cmdline, Constants.MAX_STRING_LENGTH);
-
-            long fragmentSeq = 0;
-            long fragmentCount =
-                jvmInputArgumentsFragements.size()
-                    + jvmClassPathFragements.size()
-                    + cmdlineFragements.size();
-
-            for (String entry : jvmInputArgumentsFragements) {
-                Map<String, Object> fragmentMap = createFragmentMap(map, fragmentSeq++, fragmentCount);
-                fragmentMap.put("jvmInputArguments", entry);
-
-                if (reporter != null) {
-                    reporter.report(PROFILER_NAME, fragmentMap);
-                }
-            }
-
-            for (String entry : jvmClassPathFragements) {
-                Map<String, Object> fragmentMap = createFragmentMap(map, fragmentSeq++, fragmentCount);
-                fragmentMap.put("jvmClassPath", entry);
-
-                if (reporter != null) {
-                    reporter.report(PROFILER_NAME, fragmentMap);
-                }
-            }
-
-            for (String entry : cmdlineFragements) {
-                Map<String, Object> fragmentMap = createFragmentMap(map, fragmentSeq++, fragmentCount);
-                fragmentMap.put("cmdline", entry);
-
-                if (reporter != null) {
-                    reporter.report(PROFILER_NAME, fragmentMap);
-                }
-            }
-        }
-    }
-
-    private void init() {
-        jvmInputArguments = StringUtils.join(ProcessUtils.getJvmInputArguments(), " ");
-        jvmClassPath = ProcessUtils.getJvmClassPath();
-        jvmXmxBytes = ProcessUtils.getJvmXmxBytes();
-
-        cmdline = ProcFileUtils.getCmdline();
-        if (cmdline == null) {
-            cmdline = "";
-        }
-    }
-
-    private Map<String, Object> createFragmentMap(
-        Map<String, Object> copyFrom, long fragmentSeq, long fragmentCount) {
-        Map<String, Object> fragmentMap = new HashMap<String, Object>(copyFrom);
-        fragmentMap.put("fragmentSeq", fragmentSeq);
-        fragmentMap.put("fragmentCount", fragmentCount);
-        fragmentMap.put("jvmInputArguments", "");
-        fragmentMap.put("jvmClassPath", "");
-        fragmentMap.put("cmdline", "");
-
-        return fragmentMap;
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ProfilerBase.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ProfilerBase.java
deleted file mode 100644
index d886aee6e..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ProfilerBase.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.util.ProcFileUtils;
-import org.apache.streampark.plugin.profiling.util.ProcessUtils;
-import org.apache.streampark.plugin.profiling.util.SparkUtils;
-import org.apache.streampark.plugin.profiling.util.Utils;
-
-import java.util.UUID;
-
-public class ProfilerBase {
-    private String tag = null;
-    private String cluster = null;
-    private String hostName = null;
-    private String processName = null;
-    private String processUuid = UUID.randomUUID().toString();
-
-    private String jobId = null;
-    private String appId = null;
-
-    private String role = null;
-
-    public ProfilerBase() {
-        setHostName(Utils.getLocalHostName());
-        setProcessName(ProcessUtils.getCurrentProcessName());
-    }
-
-    public String getTag() {
-        return tag;
-    }
-
-    public void setTag(String tag) {
-        this.tag = tag;
-    }
-
-    public String getCluster() {
-        return cluster;
-    }
-
-    public void setCluster(String cluster) {
-        this.cluster = cluster;
-    }
-
-    public String getHostName() {
-        return hostName;
-    }
-
-    public void setHostName(String hostName) {
-        this.hostName = hostName;
-    }
-
-    public String getProcessName() {
-        return processName;
-    }
-
-    public void setProcessName(String processName) {
-        this.processName = processName;
-    }
-
-    public String getProcessUuid() {
-        return processUuid;
-    }
-
-    public void setProcessUuid(String processUuid) {
-        this.processUuid = processUuid;
-    }
-
-    public String getJobId() {
-        return jobId;
-    }
-
-    public void setJobId(String jobId) {
-        this.jobId = jobId;
-    }
-
-    public String getAppId() {
-        if (appId != null && !appId.isEmpty()) {
-            return appId;
-        }
-
-        appId = SparkUtils.getSparkEnvAppId();
-        return appId;
-    }
-
-    public void setAppId(String appId) {
-        this.appId = appId;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public String getRole() {
-        if (role != null && !role.isEmpty()) {
-            return role;
-        }
-
-        String cmdline = ProcFileUtils.getCmdline();
-        role = SparkUtils.probeRole(cmdline);
-        return role;
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/StacktraceCollectorProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/StacktraceCollectorProfiler.java
deleted file mode 100644
index 189d73201..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/StacktraceCollectorProfiler.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethod;
-import org.apache.streampark.plugin.profiling.util.Stacktrace;
-import org.apache.streampark.plugin.profiling.util.StacktraceMetricBuffer;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.ThreadInfo;
-import java.lang.management.ThreadMXBean;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class collects stacktraces by getting thread dump via JMX, and stores the stacktraces into
- * the given buffer.
- *
- */
-public class StacktraceCollectorProfiler implements Profiler {
-    private long interval;
-    private final StacktraceMetricBuffer buffer;
-    private String ignoreThreadNamePrefix = "";
-    private int maxStringLength = Constants.MAX_STRING_LENGTH;
-    private final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
-
-    public StacktraceCollectorProfiler(StacktraceMetricBuffer buffer, String ignoreThreadNamePrefix) {
-        this(buffer, ignoreThreadNamePrefix, Constants.MAX_STRING_LENGTH);
-    }
-
-    public StacktraceCollectorProfiler(
-        StacktraceMetricBuffer buffer, String ignoreThreadNamePrefix, int maxStringLength) {
-        this.buffer = buffer;
-        this.ignoreThreadNamePrefix = ignoreThreadNamePrefix == null ? "" : ignoreThreadNamePrefix;
-        this.maxStringLength = maxStringLength;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    @Override
-    public long getInterval() {
-        return this.interval;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-    }
-
-    @Override
-    public void profile() {
-        ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
-        if (threadInfos == null) {
-            return;
-        }
-
-        for (ThreadInfo threadInfo : threadInfos) {
-            String threadName = threadInfo.getThreadName();
-            if (threadName == null) {
-                threadName = "";
-            }
-
-            if (!ignoreThreadNamePrefix.isEmpty() && threadName.startsWith(ignoreThreadNamePrefix)) {
-                continue;
-            }
-
-            StackTraceElement[] stackTraceElements = threadInfo.getStackTrace();
-
-            Stacktrace stacktrace = new Stacktrace();
-            stacktrace.setThreadName(threadName);
-            stacktrace.setThreadState(String.valueOf(threadInfo.getThreadState()));
-
-            // Start from bottom of the stacktrace so we could trim top method (most nested method) if the
-            // size is too large
-            int totalLength = 0;
-            List<ClassAndMethod> stack = new ArrayList<>(stackTraceElements.length);
-            for (int i = stackTraceElements.length - 1; i >= 0; i--) {
-                StackTraceElement stackTraceElement = stackTraceElements[i];
-                String className = stackTraceElement.getClassName();
-                String methodName = stackTraceElement.getMethodName();
-                stack.add(new ClassAndMethod(className, methodName));
-
-                totalLength += className.length() + methodName.length();
-
-                if (totalLength >= maxStringLength) {
-                    stack.add(new ClassAndMethod("_stack_", "_trimmed_"));
-                    break;
-                }
-            }
-
-            // Reverse the stack so the top method (most nested method) is the first element of the array
-            ClassAndMethod[] classAndMethodArray = new ClassAndMethod[stack.size()];
-            for (int i = 0; i < stack.size(); i++) {
-                classAndMethodArray[classAndMethodArray.length - 1 - i] = stack.get(i);
-            }
-
-            stacktrace.setStack(classAndMethodArray);
-
-            buffer.appendValue(stacktrace);
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/StacktraceReporterProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/StacktraceReporterProfiler.java
deleted file mode 100644
index b68697123..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/StacktraceReporterProfiler.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.reporter.ConsoleOutputReporter;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethod;
-import org.apache.streampark.plugin.profiling.util.Stacktrace;
-import org.apache.streampark.plugin.profiling.util.StacktraceMetricBuffer;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
-
-/**
- * This class reads the stacktraces from the given buffer and send out via given reporter.
- */
-public class StacktraceReporterProfiler extends ProfilerBase implements Profiler {
-    public static final String PROFILER_NAME = "Stacktrace";
-
-    private final StacktraceMetricBuffer buffer;
-
-    private Reporter reporter = new ConsoleOutputReporter();
-
-    private long interval = Constants.DEFAULT_METRIC_INTERVAL;
-
-    public StacktraceReporterProfiler(StacktraceMetricBuffer buffer, Reporter reporter) {
-        this.buffer = buffer;
-        this.reporter = reporter;
-    }
-
-    @Override
-    public long getInterval() {
-        return interval;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-        this.reporter = reporter;
-    }
-
-    @Override
-    public void profile() {
-        if (buffer == null) {
-            return;
-        }
-
-        if (reporter == null) {
-            return;
-        }
-
-        long startEpoch = buffer.getLastResetMillis();
-
-        Map<Stacktrace, AtomicLong> metrics = buffer.reset();
-
-        long endEpoch = buffer.getLastResetMillis();
-
-        for (Map.Entry<Stacktrace, AtomicLong> entry : metrics.entrySet()) {
-            Map<String, Object> map = new HashMap<>();
-
-            map.put("startEpoch", startEpoch);
-            map.put("endEpoch", endEpoch);
-
-            map.put("host", getHostName());
-            map.put("name", getProcessName());
-            map.put("processUuid", getProcessUuid());
-            map.put("appId", getAppId());
-
-            if (getTag() != null) {
-                map.put("tag", getTag());
-            }
-
-            if (getCluster() != null) {
-                map.put("cluster", getCluster());
-            }
-
-            if (getRole() != null) {
-                map.put("role", getRole());
-            }
-
-            Stacktrace stacktrace = entry.getKey();
-
-            map.put("threadName", stacktrace.getThreadName());
-            map.put("threadState", stacktrace.getThreadState());
-
-            ClassAndMethod[] classAndMethodArray = stacktrace.getStack();
-            if (classAndMethodArray != null) {
-                List<String> stackArray = new ArrayList<>(classAndMethodArray.length);
-                for (int i = 0; i < classAndMethodArray.length; i++) {
-                    ClassAndMethod classAndMethod = classAndMethodArray[i];
-                    stackArray.add(classAndMethod.getClassName() + "." + classAndMethod.getMethodName());
-                }
-                map.put("stacktrace", stackArray);
-            }
-
-            map.put("count", entry.getValue().get());
-
-            reporter.report(PROFILER_NAME, map);
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ThreadInfoProfiler.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ThreadInfoProfiler.java
deleted file mode 100644
index 6f744b9e1..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/profiler/ThreadInfoProfiler.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.profiler;
-
-import org.apache.streampark.plugin.profiling.Profiler;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.ThreadMXBean;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * ThreadInfoProfiler is used to Collects the Thread Related Metrics.
- *
- */
-public class ThreadInfoProfiler extends ProfilerBase implements Profiler {
-    public static final String PROFILER_NAME = "ThreadInfo";
-    public static final AgentLogger LOGGER =
-        AgentLogger.getLogger(ThreadInfoProfiler.class.getName());
-    private long interval = Constants.DEFAULT_METRIC_INTERVAL;
-
-    private ThreadMXBean threadMXBean;
-    /**
-     * to keep track of Total Thread.
-     */
-    private long previousTotalStartedThreadCount = 0L;
-
-    private Reporter reporter;
-
-    public ThreadInfoProfiler(Reporter reporter) {
-        setReporter(reporter);
-        init();
-    }
-
-    private void init() {
-        try {
-            this.threadMXBean = ManagementFactory.getThreadMXBean();
-        } catch (Throwable ex) {
-            LOGGER.warn("Failed to get Thread MXBean", ex);
-        }
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    @Override
-    public long getInterval() {
-        return interval;
-    }
-
-    @Override
-    public void setReporter(Reporter reporter) {
-        this.reporter = reporter;
-    }
-
-    @Override
-    public void profile() {
-        /** total Thread created so far since JVm Launch. */
-        long totalStartedThreadCount = 0L;
-        /** Number of thread which are currently active. */
-        int liveThreadCount = 0;
-        /** the peak live thread count since the Java virtual machine started or peak was reset */
-        int peakThreadCount = 0;
-        /** Number of new thread created since last time time the metrics was created. */
-        long newThreadCount = 0;
-        /** This is a Derived metrics from previous data point. */
-        if (threadMXBean != null) {
-            liveThreadCount = threadMXBean.getThreadCount();
-            peakThreadCount = threadMXBean.getPeakThreadCount();
-            totalStartedThreadCount = threadMXBean.getTotalStartedThreadCount();
-            newThreadCount = totalStartedThreadCount - this.previousTotalStartedThreadCount;
-            this.previousTotalStartedThreadCount = totalStartedThreadCount;
-        }
-
-        Map<String, Object> map = new HashMap<>();
-
-        map.put("epochMillis", System.currentTimeMillis());
-        map.put("name", getProcessName());
-        map.put("host", getHostName());
-        map.put("processUuid", getProcessUuid());
-        map.put("appId", getAppId());
-
-        if (getTag() != null) {
-            map.put("tag", getTag());
-        }
-
-        if (getCluster() != null) {
-            map.put("cluster", getCluster());
-        }
-
-        if (getRole() != null) {
-            map.put("role", getRole());
-        }
-
-        map.put("totalStartedThreadCount", totalStartedThreadCount);
-        map.put("newThreadCount", newThreadCount);
-        map.put("liveThreadCount", liveThreadCount);
-        map.put("peakThreadCount", peakThreadCount);
-
-        if (reporter != null) {
-            reporter.report(PROFILER_NAME, map);
-        }
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/reporter/ConsoleOutputReporter.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/reporter/ConsoleOutputReporter.java
deleted file mode 100644
index 9ce55121b..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/reporter/ConsoleOutputReporter.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.reporter;
-
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-import org.apache.streampark.plugin.profiling.util.Utils;
-
-import java.util.Map;
-
-public class ConsoleOutputReporter implements Reporter {
-
-    private static final AgentLogger LOGGER = AgentLogger.getLogger(ConsoleOutputReporter.class.getName());
-
-    @Override
-    public void report(String profilerName, Map<String, Object> metrics) {
-        LOGGER.info(String.format("ConsoleOutputReporter - %s: %s", profilerName, Utils.toJsonString(metrics)));
-    }
-
-    @Override
-    public void close() {
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/reporter/HttpReporter.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/reporter/HttpReporter.java
deleted file mode 100644
index 83147b89a..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/reporter/HttpReporter.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.reporter;
-
-import org.apache.streampark.plugin.profiling.ArgumentUtils;
-import org.apache.streampark.plugin.profiling.Reporter;
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-import org.apache.streampark.plugin.profiling.util.Utils;
-
-import scalaj.http.Http;
-import scalaj.http.HttpResponse;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-public class HttpReporter implements Reporter {
-
-    private static final AgentLogger LOGGER = AgentLogger.getLogger(HttpReporter.class.getName());
-
-    private static final String ARG_ID = "id";
-    private static final String ARG_TOKEN = "token";
-    private static final String ARG_URL = "url";
-    private static final String ARG_TYPE = "type";
-    private Long id;
-    private String token;
-    private String url;
-    private String type;
-
-    public HttpReporter() {
-    }
-
-    @Override
-    public void doArguments(Map<String, List<String>> parsedArgs) {
-        id = Long.parseLong(Objects.requireNonNull(ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_ID)).trim());
-        token = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_TOKEN);
-        url = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_URL);
-        type = ArgumentUtils.getArgumentSingleValue(parsedArgs, ARG_TYPE);
-    }
-
-    @Override
-    public void report(String profilerName, Map<String, Object> metrics) {
-        String json = Utils.toJsonString(metrics);
-        Map<String, Object> param = new HashMap<>(5);
-        param.put("id", id);
-        param.put("type", type);
-        param.put("token", token);
-        param.put("profiler", profilerName);
-        param.put("metric", Utils.zipString(json));
-        HttpResponse<String> response =
-            Http.apply(url)
-                .timeout(1000, 5000)
-                .header("content-type", "application/json;charset=UTF-8")
-                .postData(Utils.toJsonString(param))
-                .asString();
-        LOGGER.log("jvm-profiler profiler:" + profilerName + ",report result:" + response.body());
-    }
-
-    @Override
-    public void close() {
-    }
-}
diff --git a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/transformer/JavaAgentFileTransformer.java b/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/transformer/JavaAgentFileTransformer.java
deleted file mode 100644
index 1ec74dca3..000000000
--- a/streampark-plugin/streampark-jvm-profiler/src/main/java/org/apache/streampark/plugin/profiling/transformer/JavaAgentFileTransformer.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.plugin.profiling.transformer;
-
-import org.apache.streampark.plugin.profiling.util.AgentLogger;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethod;
-import org.apache.streampark.plugin.profiling.util.ClassAndMethodFilter;
-import org.apache.streampark.plugin.profiling.util.ClassMethodArgument;
-import org.apache.streampark.plugin.profiling.util.ClassMethodArgumentFilter;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.CtMethod;
-import javassist.LoaderClassPath;
-
-import java.io.ByteArrayInputStream;
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.instrument.IllegalClassFormatException;
-import java.security.ProtectionDomain;
-import java.util.List;
-
-public class JavaAgentFileTransformer implements ClassFileTransformer {
-    private static final AgentLogger LOGGER =
-        AgentLogger.getLogger(JavaAgentFileTransformer.class.getName());
-
-    private final ClassAndMethodFilter durationProfilingFilter;
-    private final ClassMethodArgumentFilter argumentFilterProfilingFilter;
-
-    public JavaAgentFileTransformer(
-        List<ClassAndMethod> durationProfiling, List<ClassMethodArgument> argumentProfiling) {
-        this.durationProfilingFilter = new ClassAndMethodFilter(durationProfiling);
-        this.argumentFilterProfilingFilter = new ClassMethodArgumentFilter(argumentProfiling);
-    }
-
-    @Override
-    public byte[] transform(
-        ClassLoader loader,
-        String className,
-        Class<?> classBeingRedefined,
-        ProtectionDomain protectionDomain,
-        byte[] classfileBuffer)
... 5457 lines suppressed ...