Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade Profiler Command: update stop action and add dump action #2612

Closed
wants to merge 13 commits into from

Conversation

Winson-Huang
Copy link
Contributor

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。

Add other output content formats that async-profiler supports to Arthas
profiler command, such as flat, traces, tree, etc.
Formerly, format option was used to control content format indirectly
through filename extension. Now, format option will directly control
content format, and it will still be used to generate output filename
extension when filename is not specified.
To keep consistent with async-profiler, add short name -I to --include option,
and short name -X to --exclude option.
Edit processStop method, add an argument of ProfilerAction type,
because there exists other action(dump) that need call it.
@Winson-Huang Winson-Huang deleted the UpgradeActionStopDump branch August 12, 2023 02:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant