-
Notifications
You must be signed in to change notification settings - Fork 7.5k
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
更好的profiler命令支持 #2164
Comments
此任务已被 @Winson-Huang 认领,欢迎交流。 |
整体思路Arthas 的 async-profiler 的官方文档中提到 可以看出,Arthas
|
|
目前大部分功能实际上在我的本地仓库已经完成了,我的计划是按 action 逐个提交 PR 进行讨论和细化。 |
现在在应用的控制台会打印,可能要处理下:
参考: #2625 (comment) |
@hengyunabc 关于 首先,此选项大概率不是 issue #2625 中提到的无法生成火焰图的原因,我的测试结果和您提到的 comment 一样,火焰图可以正常生成。 然后,此选项确实会导致出现没有用处的 warning 信息,要消除此信息,只要不将 framebuf 参数加入 JVM TI 字符串即可。 最简单的方式是直接将此选项和相关变量直接移除,但这会破坏 Arthas 的向后兼容。第二种方式是让 Arthas 仍接收此选项,但不传递给 async-profiler 且不给出任何警告。最复杂的方式是在第二种方式的基础上,若检测到 framebuf 选项,则为命令结果添加一个警告信息并输出到 arthas 的 CLI。 |
可以直接去掉这个选项,因为 arthas 自带的 async-profiler 是匹配的。基本不存在用新版本 arthas,使用旧版本的 async-profiler so 的情况。 |
其实我的意思是,如果直接去掉此选项,那么使用旧版本 arthas 时的那些带有 framebuf 选项的命令就不适用与新版本 arthas 了。不过如果 arthas 绝大部分情况是用手动输入命令进行控制,而没有 arthas 命令脚本这种输入形式的话,是不是不太需要考虑这种向后兼容性? |
Arthas 的文档中没有明确说这一点,是不是 Arthas 本身没有命令脚本这种输入形式? |
framebuf 是一个很少使用的参数,并且没有软件能做到旧版本的完全兼容。可以直接去掉。 |
关于 fdtransfer 选项的讨论在 shell 脚本的 start/resume action(L347)处理流程中,在启动 profiler 之前会根据 根据 Discussion,无法从待分析的 Java 进程本身启动该工具,也就是不能利用织入的代码启动该工具,一种可行的办法是 Arthas 进程本身使用高权限启动,并启动 fdtransfer 工具。这种实现方式已经超出了 Arthas profiler 命令本身的范畴,我可能无法在 OSPP 的期限内完成。 |
关于 collect action 的讨论在 profiler.sh 脚本中,L233 --timeout --loop 这两个选项的设计有些奇怪。timeout 在行为上与 duration 有些类似,功能上也有些重复。loop 的作用是让 profiler 持续执行,但每隔一段时间就将【这一段时间内】的分析结果输出到文件。在 async-profiler 中,PARAMS 变量仅用于 start、resume、check、collect 这 4 个 ACTION,DURATION 变量仅用于 collect。并且当 ACTION 为 collect 时,如果 timeout 和 loop 这两个选项有效,ACTION 会被设定为 start。也就是说,timeout 和 loop 选项实际上只会对 start、resume、check 有效。可以看出 async-profiler 在 collect、duration、timeout、loop 选项/action 上的处理有些混乱。关于这两个选项的详细用法可以参考 What does "timeout" option do ? 和 split profiling into multiple JFR files。 目前在 Arthas 中,start 与 async-profiler 的 collect action 很类似,反而不存在与 async-profiler 的 start action 完全对应的 action。到底如何实现这两个 action 有待详细讨论。 一种方式是尽量模拟 async-profiler 的行为。也就是把 start action 修改为与 duration 无关的 action,且接收 timeout 和 loop 这两个选项。然后再添加 collect action 代替当前 start 的行为且不接收这两个参数。 另一种方式是让 arthas 把 start 和 collect 视为同一个 action。在 timeout 和 loop 选项有效时让 duration 仍然起作用,这种情况下一些选项组合产生的行为会比较混乱:比如设定 loop 为 5s 但同时指定了 duration,在 async-profiler 中总是会忽略 duration,但 Arthas 仍会在 duration 时间之后停止 profiler。 |
这个可以忽略。 |
当时把 但目前来看 所以,可以考虑这个方案:
|
这个 issue 基本上已经完成了,有需要修改的地方可以再联系我 @hengyunabc |
目前 https://github.com/jvm-profiling-tools/async-profiler 已经发布了多个
2.*
新版本。arthas里的集成是据比较旧版本1.*
设计的,有很多新的特性没有支持。The text was updated successfully, but these errors were encountered: