async-profiler查看jvm支持的profiling事件列表
async-profiler viewing list of profiling events supported by jvm
我正在尝试查看 jvm 支持的分析事件列表。如doc中所述,我使用了list
命令,如下所示-
root@vrni-platform:/home/ubuntu/async-profiler-2.0-linux-x64# ./profiler.sh list 10208
Basic events:
cpu
alloc
lock
wall
itimer
Java method calls:
ClassName.methodName
Perf events:
page-faults
context-switches
cycles
instructions
cache-references
cache-misses
branches
branch-misses
bus-cycles
L1-dcache-load-misses
LLC-load-misses
dTLB-load-misses
mem:breakpoint
trace:tracepoint
我在上面的输出中没有看到 answer 中提到的事件。但是,如果我执行该答案中提到的上述事件,它似乎正在工作。
root@vrni-platform:/home/ubuntu/async-profiler-2.0-linux-x64# ./profiler.sh -e malloc -d 30 -f /tmp/flamegraph.html 10208
Profiling for 30 seconds
Done
有人可以告诉我如何查看 aysnc-profiler 支持的特定 jvm 的所有事件列表吗?如果 list
是 profiler.sh
的正确参数,那么为什么 malloc 等显示在所有事件列表下?
环境
ubuntu@vrni-platform:~/async-profiler-2.0-linux-x64# ./profiler.sh --version
Async-profiler 2.0 built on Mar 14 2021
Copyright 2016-2021 Andrei Pangin
ubuntu@vrni-platform:~/async-profiler-2.0-linux-x64# uname -a
Linux vrni-platform 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@vrni-platform:~/async-profiler-2.0-linux-x64$ java -version
openjdk version "11.0.11" 2021-04-20 LTS
OpenJDK Runtime Environment Zulu11.48+22-SA (build 11.0.11+9-LTS)
OpenJDK 64-Bit Server VM Zulu11.48+22-SA (build 11.0.11+9-LTS, mixed mode)
malloc
这里不是单独的事件。这只是一个执行断点的例子。
async-profiler,在硬件断点hardware breakpoints, can trace access to any memory location. Using the perf-like syntax的协助下,您可以选择对代码中任何给定地址的执行进行profile:
./profiler.sh -e mem:0x123450:x <pid>
可以指定本机函数名称而不是数字地址。 malloc
只是标准 C 库 (libc) 中函数的名称:
./profiler.sh -e mem:malloc:x <pid>
而-e malloc
是上述事件描述符的快捷方式。如果 async-profiler 发现给定的事件名称对应于某个本机函数,它会分析此函数的执行。
除了 malloc
,您还可以分析任何其他函数。例如,
-e pthread_start
查找谁启动了新线程(Java 和本机线程);
-e connect
分析新套接字连接;
-e JVM_GC
查找 System.gc()
的来电者;
-e G1CollectedHeap::humongous_obj_allocate
分析 G1 巨大的分配;
-e Deoptimization::uncommon_trap
找到编译后的代码去优化的地方;
等等,等等。在 JVM 中,在标准 class 库中,在 libc 中,有成千上万的本机函数。显然,在 async-profiler 帮助中列出它们实际上是不可能的。
我正在尝试查看 jvm 支持的分析事件列表。如doc中所述,我使用了list
命令,如下所示-
root@vrni-platform:/home/ubuntu/async-profiler-2.0-linux-x64# ./profiler.sh list 10208
Basic events:
cpu
alloc
lock
wall
itimer
Java method calls:
ClassName.methodName
Perf events:
page-faults
context-switches
cycles
instructions
cache-references
cache-misses
branches
branch-misses
bus-cycles
L1-dcache-load-misses
LLC-load-misses
dTLB-load-misses
mem:breakpoint
trace:tracepoint
我在上面的输出中没有看到 answer 中提到的事件。但是,如果我执行该答案中提到的上述事件,它似乎正在工作。
root@vrni-platform:/home/ubuntu/async-profiler-2.0-linux-x64# ./profiler.sh -e malloc -d 30 -f /tmp/flamegraph.html 10208
Profiling for 30 seconds
Done
有人可以告诉我如何查看 aysnc-profiler 支持的特定 jvm 的所有事件列表吗?如果 list
是 profiler.sh
的正确参数,那么为什么 malloc 等显示在所有事件列表下?
环境
ubuntu@vrni-platform:~/async-profiler-2.0-linux-x64# ./profiler.sh --version
Async-profiler 2.0 built on Mar 14 2021
Copyright 2016-2021 Andrei Pangin
ubuntu@vrni-platform:~/async-profiler-2.0-linux-x64# uname -a
Linux vrni-platform 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@vrni-platform:~/async-profiler-2.0-linux-x64$ java -version
openjdk version "11.0.11" 2021-04-20 LTS
OpenJDK Runtime Environment Zulu11.48+22-SA (build 11.0.11+9-LTS)
OpenJDK 64-Bit Server VM Zulu11.48+22-SA (build 11.0.11+9-LTS, mixed mode)
malloc
这里不是单独的事件。这只是一个执行断点的例子。
async-profiler,在硬件断点hardware breakpoints, can trace access to any memory location. Using the perf-like syntax的协助下,您可以选择对代码中任何给定地址的执行进行profile:
./profiler.sh -e mem:0x123450:x <pid>
可以指定本机函数名称而不是数字地址。 malloc
只是标准 C 库 (libc) 中函数的名称:
./profiler.sh -e mem:malloc:x <pid>
而-e malloc
是上述事件描述符的快捷方式。如果 async-profiler 发现给定的事件名称对应于某个本机函数,它会分析此函数的执行。
除了 malloc
,您还可以分析任何其他函数。例如,
-e pthread_start
查找谁启动了新线程(Java 和本机线程);-e connect
分析新套接字连接;-e JVM_GC
查找System.gc()
的来电者;-e G1CollectedHeap::humongous_obj_allocate
分析 G1 巨大的分配;-e Deoptimization::uncommon_trap
找到编译后的代码去优化的地方;
等等,等等。在 JVM 中,在标准 class 库中,在 libc 中,有成千上万的本机函数。显然,在 async-profiler 帮助中列出它们实际上是不可能的。