Upgrade Profiler Command: update stop action and add dump action #2612
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
stop/dump
stop action 主要涉及测试结果的输出,需处理 profiler.sh 中 FIEL、OUTPUT、FORMAT 三个变量对应的选项。在 sh 脚本中分析结果允许输出到标准输出或文件,且与输出内容格式是完全解耦的。Arthas 的设计可能是:要求必须将分析结果保存到文件,因此在
processStop
方法中只要判断 file 选项为空就会指定一个默认文件名。目前对 file 选项的捕捉本身没有问题,可以对应到 sh 中的 FILE 变量。
OUTPUT 变量:
在 sh 中通过
-o
选项转换为此变量。但目前 arthas 中没有该选项,仅有一个相关的 format 选项,它仅用于构造默认文件名的后缀(未传递给 execute 方法)且只有两个可选值,【分析结果】的内容格式是让 async-profiler 通过这个后缀名推断的。在 sh 中,通过设置 OUTPUT 可以得到其他格式的输出(如 flat 等格式)。要想在 profiler command 中支持这些格式,可以将 format 选项的值也用于构造 executeArgs,将其与 sh 的-o
选项对应起来。根据 sh 脚本中的使用说明,
-o
选项可选值为flat|traces|collapsed|flamegraph|tree|jfr
,且均可在 arguments.cpp 中找到详细解释,其中 flat 和 traces 可加[=N]
格式参数,在 Arthas 中,用 format 选项捕捉这些值,并为选项添加短名称o
。本选项的值直接拼接到 JVM TI 格式参数中,与 file 选项不同,在 Arthas 中需要注意executeArgs
方法构造 JVMTI 格式字符串的过程。在需要生成默认文件名时,不直接使用 format 选项的值而是添加一层判断:先判断 format 是否有效,若无效就让后缀取 html(或其他值),然后根据 format 的各种情况确定后缀名,然后再生成文件名。
format 选项不要设定默认值,否则当用户不指定 format 但指定 file 时,用 file 后缀名推断输出格式(async profiler 内部会处理这一过程)会失效。例如,假设 format 默认值为 flamegraph,用户指定了 file 后缀为 jfr 但未指定 format,用户预期是输出 jfr 格式,但 flamegraph 会被传递给 async profiler,因此将输出火焰图格式(虽然后缀名是 jfr)。
FORMAT 变量:
shell 脚本中对此变量的处理分散在多处,但都位于 L149 开始的循环块中。L184 -s。L187 -g。L190 -a。L193
-l
。L200-I
。L208 --filter 选项暂不实现,未出现在 shell 脚本说明中。
L213 --title 需要转义 XML 特殊字符,以及逗号(防止与 JVM TI 冲突)。
L219 仅实现 --minwidth 即可。L223 --reverse。L226 仅需要 --total。
dump action
在
ProfilerAction
枚举类中添加 dump 即可捕获,排列顺序尽量与原 sh 脚本保持一致。修改
processStop
method 使其接收多种 action。