async-profiler 基础命令说明
async-profiler 基础命令说明
1. 命令格式
profiler.sh [子命令] 参数 pid
其中,pid 是 Java 进程的进程号。
1.1 手动启动采集
./profiler.sh start -e itimer --include 'com.example/*' --exclude '*Unsafe.park*' pid
start: 启动采集线程。--include: 包含路径中以com.example开头的类。--exclude: 排除路径中包含Unsafe.park字符的类。-e itimer: 指定采集模式为itimer,这是 CPU 模式的简化版,不涉及 C 级别线程堆栈,无需申请系统权限。
1.2 手动停止采集
./profiler.sh stop -f ~/profile-output/aa-%p-%t.html pid
stop: 停止采集线程。-f: 指定输出结果的文件名和路径,%p表示当前进程号,%t表示当前时间戳,生成的文件为 HTML 格式。
1.3 查看采样点数量
./profiler.sh getSamples pid
1.4 查看状态
./profiler.sh status pid
1.5 自动结束采集
./profiler.sh -d 60 -e itimer -f ~/profile-output/aa-%p-%t.html pid
-d 60: 指定执行 60 秒后自动停止。
2. 常用参数
2.1 -d
指定采样的持续时间,以秒为单位。例如,-d 60 表示采样持续 60 秒。
2.2 -e
指定要收集的事件类型,默认是 CPU 事件(-e cpu)。可以选择其他类型的事件,如内存分配(-e alloc)。
-e alloc: 内存分配事件类型。-e cpu: CPU 事件类型。-e itimer: CPU 的简化版事件类型,不涉及 C 级别线程堆栈,无需申请系统权限。
2.3 -f
指定输出文件的名称。该参数将结果写入指定的文件中。
2.4 -b
调整采样结果的缓冲区容量。如果采样间隔太小或时间太长,可能会导致溢出。可以使用 -b N 来增加缓冲区的容量。
2.5 -i
指定采样的间隔,以纳秒为单位。例如,-i 1000000 表示每 1,000,000 纳秒(即 1 毫秒)进行一次采样。
2.6 --title
为生成的火焰图或结果文件设置标题。
2.7 --collapse
在生成的火焰图中折叠或隐藏某些函数,有助于减少火焰图的复杂性。
2.8 --threads
只跟踪特定的线程。可以通过指定线程 ID 或线程名称来实现这一点。
2.9 --include 和 --exclude
用于指定要包含或排除在采样之外的方法或类,这对于过滤掉不感兴趣的部分或专注于特定部分很有用。
./profiler.sh start -e itimer --include 'com.example/*' --exclude '*Unsafe.park*' pid
--include: 包含路径中以com.example开头的类。--exclude: 排除路径中包含Unsafe.park字符的类。
2.10 --help
显示帮助信息。
3. 完整参数
Usage: ./profiler.sh [action] [options] <pid>
Actions:
start 开始分析并立即返回
resume 恢复先前已停止的分析会话
stop 停止分析
dump 转储已收集的数据而不停止分析会话
check 检查指定的分析事件是否可用
status 打印分析状态
meminfo 打印分析器内存统计信息
list 列出目标 JVM 支持的分析事件
collect 在指定的时间段内收集分析数据,然后停止
Options:
-e event 分析事件: cpu|alloc|lock|cache-misses 等
-d duration 运行分析 <duration> 秒
-f filename 将输出转储到 <filename>
-i interval 采样间隔,以纳秒为单位
-j jstackdepth 最大 Java 堆栈深度
-t 单独分析每个线程
-s 使用简单类名而不是全限定名
-g 打印方法签名
-a 注释 Java 方法
-l 添加库名称
-o fmt 输出格式: flat|traces|collapsed|flamegraph|tree|jfr
-I include 仅输出包含指定模式的堆栈跟踪
-X exclude 排除包含指定模式的堆栈跟踪
-v, --version 显示版本信息
--title string FlameGraph 标题
--minwidth pct 跳过小于 pct% 的帧
--reverse 生成反转的 FlameGraph / 调用树
--loop time 循环运行分析器
--alloc bytes 分配分析间隔,以字节为单位
--live 仅从活动对象构建分配配置文件
--lock duration 锁分析阈值,以纳秒为单位
--total 累积总值(时间、字节等)
--all-user 仅包括用户模式事件
--sched 按调度策略分组线程
--cstack mode 如何遍历 C 堆栈: fp|dwarf|lbr|no
--begin function 当执行函数时开始分析
--end function 当执行函数时结束分析
--ttsp 时间到安全点分析
--jfrsync config 与 JFR 记录同步
--lib path 容器中 libasyncProfiler.so 的完整路径
--fdtransfer 使用 fdtransfer 服务非特权目标的 perf 请求
<pid> 是目标 JVM 的数字进程 ID
或 'jps' 关键字自动查找正在运行的 JVM
或应用程序的名称,如 jps 工具中显示的那样
示例:
./profiler.sh -d 30 -f profile.html 3456
./profiler.sh start -i 999000 jps
./profiler.sh stop -o flat jps
./profiler.sh -d 5 -e alloc MyAppName