当前位置:首页 > 技术 > 正文内容

async-profiler 基础命令说明

访客 技术 2026年10月14日 1

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
  
返回列表

上一篇:Solidity中存储和内存的数据布局

没有最新的文章了...

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。