鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

JVM波动诊断使用示例

监测模式

1
devkit diag jvm-jitter -a monitor -e jit.deoptimization -c /home/DevKit-CLI-xx.xx.xx-Linux-Kunpeng/diag/config/kunpeng_devkit.cfg -p 1179

参数-a monitor指定为监测模式,参数-e jit.deoptimization指定监测退优化事件,参数-c指定配置文件路径,参数-p 1179指定待监测Java进程的进程号。

返回信息如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
17:27:28.597 [main] DEBUG com.huawei.kunpeng.devkit.odin.cli.config.JvmCliAppConfig - The cli cmd is -a:monitor:-e:jit.deoptimization:-c:/home/DevKit-CLI-xx.xx.xx-Linux-Kunpeng/diag/config/kunpeng_devkit.cfg:-p:1179:
17:27:28.961 [jvm-diagnosis-guardian-common-thread-1] INFO com.huawei.kunpeng.devkit.odin.cli.CliWorker - Success to build unixSocket connect
17:27:28.964 [jvm-diagnosis-guardian-common-thread-1] DEBUG com.huawei.kunpeng.devkit.odin.cli.CliWorker - begin jvm diagnosis monitor is called
17:27:28.964 [jvm-diagnosis-profiler-wireIo-thread-1] DEBUG com.huawei.kunpeng.devkit.odin.profiler.wire.WireIo - start receiving message. type : JvmDiagnosisResp
17:27:29.000 [jvm-diagnosis-profiler-wireIo-thread-1] INFO com.huawei.kunpeng.devkit.odin.cli.CliWorker - other type: CPU_JDBC_METHOD
17:27:30.062 [jvm-diagnosis-guardian-common-thread-1] DEBUG com.huawei.kunpeng.devkit.odin.profiler.wire.WireIo - sending message : type: JVM_JIT_MONITOR
17:27:30.066 [jvm-diagnosis-guardian-common-thread-1] DEBUG com.huawei.kunpeng.devkit.odin.profiler.wire.WireIo - message is sent
17:27:31.779 [jvm-diagnosis-profiler-wireIo-thread-1] INFO com.huawei.kunpeng.devkit.odin.cli.CliWorker - JVM_JIT_MONITOR, deoptimizationRatio= 0.0, startTime=2025/02/22 PM 05:27:31.751, compileCount=2353, deoptimizationCount=140
17:27:32.752 [jvm-diagnosis-profiler-wireIo-thread-1] INFO com.huawei.kunpeng.devkit.odin.cli.CliWorker - JVM_JIT_MONITOR, deoptimizationRatio= 0.0, startTime=2025/02/22 PM 05:27:31.851, compileCount=2384, deoptimizationCount=140
...
...
...

分析模式

1
devkit diag jvm-jitter -a report -e jit.deoptimization -f /home/test/JIT_20250222_141519.jfr -o /home/report

参数-a report指定为分析模式,参数-e jit.deoptimization指定分析退优化事件,参数-f指定待分析的jfr文件路径,参数-o /home/report为指定火焰图文件生成路径。

返回信息如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
17:07:13.607 [main] DEBUG com.huawei.kunpeng.devkit.odin.cli.config.JvmCliAppConfig - The cli cmd is -a:report:-e:jit.deoptimization:-f:/home/test/JIT_20250222_141519.jfr:
-----------------------------------------------------------
Reason                              Deoptimization methods
predicate                           1
unstable_if                         2
bimorphic_or_optimized_type_check   8
class_check                         4
------------------------------------------------------------
Action                              Deoptimization methods
reinterpret                         2
maybe_recompile                     13
------------------------------------------------------------
Method                                     Reason          Action            Instruction       Line No.  Compiler  StartTime
org.json.JSONObject.testValidity(Object)   class_check     maybe_recompile   checkcast         2608      c2        2025/02/22 PM 02:14:57.020
org.json.JSONObject.testValidity(Object)   class_check     maybe_recompile   checkcast         2608      c2        2025/02/22 PM 02:14:57.320
org.json.JSONObject.testValidity(Object)   class_check     maybe_recompile   checkcast         2608      c2        2025/02/22 PM 02:14:57.620
java.lang.StringLatin1.canEncode(int)      unstable_if     reinterpret       ifne              54        c2        2025/02/22 PM 02:15:18.963
java.lang.CharacterData.of(int)            unstable_if     reinterpret       ifne              72        c2        2025/02/22 PM 02:15:19.264
...
...
...
17:07:14,786 [main] c.h.k.d.o.cli.report.JfrToFlameGraph: The generated flame graph is: /home/report/FlameGraph_JIT_20250222_141519_20250222170713.html
表1 报告参数说明

报告参数

说明

Method

触发退优化的方法名称。

Reason

触发退优化的原因,例如:

  • predicate:方法内联守卫条件失败。
  • unstable_if:分支预测失效。
  • bimorphic_or_optimized_type_check:多态调用超限或激进优化失效。
  • class_check:类的类型检查失败。

Action

JVM针对退优化采取的具体操作,例如:

  • maybe_recompile:触发方法重新编译(可能更换编译器)。
  • invalidate:使当前编译的代码无效,回退到解释器模式执行。
  • reinterpret:重新解析方法调用目标。

Instruction

触发退优化的字节码指令。

Line No.

触发退优化的Java源码行号。

Compilers

涉及退优化的编译器类型,例如:

  • C1(Client Compiler):快速编译,轻度优化。
  • C2(Server Compiler):深度优化,适合长期运行代码。
图1 JIT火焰图