Skip to content

Commit 2e40e47

Browse files
yinjipingsharang
andauthored
docs java cpu profiling (#778)
* docs: add Java CPU profiling configuration * docs: reorder Java CPU profiling section * docs: clarify profiling capability sections * docs: document OpenJ9 profiling support * docs: add Java CPU profiling availability table * docs: rename Java profiling section * docs: clarify Java profiling data types * docs: reorganize Java profiling notes * docs: move Java CPU profiling configuration section * docs: remove Java Agent unloading note * docs: fix Java profiling configuration link * ci: retrigger build * Update docs/zh/05-features/04-continuous-profiling/01-auto-profiling.md Co-authored-by: XIANG Yang <sharangxy@gmail.com> * Update docs/zh/05-features/04-continuous-profiling/01-auto-profiling.md Co-authored-by: XIANG Yang <sharangxy@gmail.com> * Update docs/zh/05-features/04-continuous-profiling/02-configuration.md Co-authored-by: XIANG Yang <sharangxy@gmail.com> * Update auto-profiling documentation Removed JVM compatibility details and Frame Pointer requirements from the auto-profiling documentation. * Refactor formatting in auto-profiling documentation Removed unnecessary line breaks and cleaned up formatting. * Revise Java CPU Profiling configuration details Updated the configuration section for Java CPU Profiling to clarify requirements and parameters. --------- Co-authored-by: XIANG Yang <sharangxy@gmail.com>
1 parent 68e8816 commit 2e40e47

2 files changed

Lines changed: 65 additions & 3 deletions

File tree

docs/zh/05-features/04-continuous-profiling/01-auto-profiling.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ permalink: /features/continuous-profiling/auto-profiling
1111

1212
# 能力和限制
1313

14+
## eBPF Profiling
15+
1416
支持的 eBPF Profiling 数据类型:
1517

1618
| 类型 | 支持语言/库 | 社区版 | 企业版 |
@@ -40,7 +42,6 @@ permalink: /features/continuous-profiling/auto-profiling
4042
| rdma | C/C++ `*` | ||
4143

4244
说明:
43-
4445
- `*`: features in development
4546
- `**`: 运行 Java 程序的 JVM 须有符号表,参考[检查方法](#jvm-符号表检查)
4647
- `***`: 当前支持版本为 Python 3.10
@@ -57,7 +58,7 @@ permalink: /features/continuous-profiling/auto-profiling
5758
- 使用 JVM 虚拟机的语言:Java
5859
- 解释型语言:Python
5960

60-
获取 Profiling 数据需满足两个前提条件
61+
通过通用 eBPF On-CPU/Off-CPU Profiling 获取调用栈时,需满足以下两个前提条件
6162

6263
- 应用进程需要开启 Frame Pointer 或启用 Agent 的 DWARF 栈回溯能力
6364
- 应用进程开启 Frame Pointer(帧指针寄存器):
@@ -76,6 +77,27 @@ Off-CPU Profiling 功能**仅会**采集如下调用栈:
7677
- 含有**至少一个**用户态函数的调用栈
7778
- 等待 CPU 的时间**不超过** 1 小时的调用栈
7879

80+
## Java Profiling
81+
82+
支持的 Java Profiling 数据类型:
83+
84+
| 类型 | 支持语言/库 | 社区版 | 企业版 |
85+
| ---- | ----------- | ------ | ------ |
86+
| cpu | Java | ||
87+
88+
说明:
89+
- 类型:
90+
- cpu:Java 方法在 CPU 上消耗的时间及函数调用栈
91+
- 语言:
92+
- 使用 JVM 虚拟机的语言:Java
93+
- 采集原理:通过 Java Agent 持续采集 JVM 方法调用栈,使用 HotSpot 的 AsyncGetCallTrace(AGCT)获取 Java 栈并补全 JIT 方法符号,用于定位 Java 方法的 CPU 热点。
94+
- 与 eBPF On-CPU Profiling 的关系:
95+
- Java CPU Profiling 通过 JVM 内的 Java Agent 采集 Java 方法栈,使用 `java.profile.cpu` 选择进程,不依赖 Frame Pointer 开启。
96+
- eBPF On-CPU Profiling 通过内核 eBPF/perf 采集用户态和内核态调用栈,使用 `ebpf.profile.on_cpu` 选择进程。
97+
- 两者相互独立,可以同时采集同一个 Java 进程,也可以只开启其中一个。若只需要清晰的 Java 方法栈,可以只开启 Java CPU Profiling,避免同时采集两份不同来源的数据。
98+
99+
具体配置方法请参考[配置方法](./configuration/#java-cpu-profiling)
100+
79101
# 常见问题
80102

81103
## JVM 符号表检查

docs/zh/05-features/04-continuous-profiling/02-configuration.md

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ inputs:
4444
- **only_in_container**: 是否仅匹配容器内的进程
4545
- **rewrite_name**: 重写进程名的规则,支持正则表达式捕获组引用
4646
- **enabled_features**: 为匹配的进程启用的功能列表:
47+
- `java.profile.cpu`: 开启 Java CPU 剖析,需要配置 `inputs.java.profile.cpu.enabled: true`,不依赖 `ebpf.profile.on_cpu`
4748
- `ebpf.profile.on_cpu`: 开启 On-CPU 剖析,需要配置 `inputs.ebpf.profile.on_cpu.disabled: false`
4849
- `ebpf.profile.off_cpu`: 开启 Off-CPU 剖析,需要配置 `inputs.ebpf.profile.off_cpu.disabled: false`
4950
- `ebpf.profile.memory`: 开启内存剖析,需要配置 `inputs.ebpf.profile.memory.disabled: false`
@@ -62,7 +63,7 @@ inputs:
6263

6364
```yaml
6465
inputs:
65-
ebpf:
66+
proc:
6667
symbol_table:
6768
golang_specific:
6869
enabled: false
@@ -143,3 +144,42 @@ inputs:
143144
- 配置该选项可以参考采集器性能统计 `deepflow_agent_ebpf_memory_profiler` 中 `time_backtracked` 指标,增大该参数使之为 0 即可。注意可能需要相应增大 `sort_length` 参数。
144145
- **queue_size**:内存剖析组件内部的队列大小。
145146
- 配置该选项可以参考采集器性能统计 `deepflow_agent_ebpf_memory_profiler` 中 `overwritten` 和 `pending` 指标,增大该配置使得前者为 0,后者不高于该配置即可。
147+
148+
# Java CPU Profiling
149+
150+
Java CPU Profiling 通过 Java Agent 的 AsyncGetCallTrace(AGCT)持续采集 JVM 方法调用栈,并补全 Java JIT 方法符号。该功能独立于 eBPF On-CPU Profiling,必须同时满足以下两个条件才会采集目标进程:
151+
- 配置 `inputs.java.profile.cpu.enabled: true`,开启 Java CPU Profiler 基础能力;
152+
- `inputs.proc.process_matcher` 命中目标进程,并且 `enabled_features` 中包含 `java.profile.cpu`。
153+
154+
推荐先按 JAR 包或完整命令行精确匹配少量业务进程,验证资源开销后再扩大范围。以下配置需要合并到现有采集器组配置中,请勿直接覆盖已有的 Process Matcher 和其他配置:
155+
156+
```yaml
157+
inputs:
158+
proc:
159+
process_matcher:
160+
- match_regex: '.*my-order-service\.jar.*'
161+
match_type: cmdline_with_args
162+
only_in_container: false
163+
enabled_features:
164+
- java.profile.cpu
165+
- proc.gprocess_info
166+
java:
167+
profile:
168+
cpu:
169+
enabled: true
170+
frequency: 99
171+
max_depth: 98
172+
sample_ring_size: 512
173+
method_cache_size: 256
174+
```
175+
176+
如果同一进程还需要普通 eBPF On-CPU Profiling,可在 `enabled_features` 中同时保留 `ebpf.profile.on_cpu`,并确保 `inputs.ebpf.profile.on_cpu.disabled: false`。两个功能使用独立的采样链路和进程名单,任何一个都不是另一个的前置条件。
177+
178+
配置参数说明:
179+
- **enabled**:默认为 false。设置为 true 后,Agent 在启动时准备 Java CPU Profiler 基础能力;修改后需重启 Agent 生效。
180+
- **frequency**:采样频率,单位为 Hz,默认为 99,范围为 1~1000。资源敏感场景可从 49 开始;199 仅建议用于短时诊断,并应先进行压测。
181+
- **max_depth**:单条 Java 调用栈最多保留的栈帧数,默认为 98,范围为 1~128。增大该值可保留更深的调用路径,但会增加样本大小和处理开销。
182+
- **sample_ring_size**:每个 JVM 中的样本环形队列容量,默认为 512,范围为 64~8192。增大该值可以缓解突发采样或发送端短时背压造成的样本丢弃,但会增加 JVM 内存占用。
183+
- **method_cache_size**:每个 JVM 中的方法缓存容量,默认为 256,范围为 64~8192。方法数量较多、符号反复解析时可适当调大,但会增加 JVM 内存占用。
184+
185+
`enabled` 和上述采样参数修改后需重启 Agent;Process Matcher 支持热更新,增删 `java.profile.cpu` 不会重启目标 JVM。

0 commit comments

Comments
 (0)