async-profiler跨平台二进制包安装:三条路线快速出火焰图 async-profiler跨平台二进制包安装三条路线快速出火焰图【免费下载链接】async-profilerSampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace perf_events项目地址: https://gitcode.com/GitHub_Trending/as/async-profiler服务CPU飙到100%、接口响应变慢你第一件事是找出哪个方法在烧CPU。async-profiler是Java采样式profiler支持CPU、堆内存分配等多种采样模式装好它的跨平台二进制包后3分钟就能出一张火焰图定位热点。先选安装路线三种方式对号入座 这节做完你能确定自己该走哪条路并确认机器满足前置条件。路线适用场景前置要求 容器部署Docker目标进程跑在容器里不想在宿主机装任何工具Docker 环境能从宿主机看到目标 Java 进程 PID Linux 本机编译生产机是 Linux x86_64kernel 4.6或 aarch64kernel 4.14需要长期反复使用Git 2.20、GCC 7 或 Clang 10、JDK 8含JRE、make 4.2 macOS 编译开发机是 Mac 10.15只分析本机 Java 进程Xcode 命令行工具xcode-select --install、JDK 8拿不准就选容器路线它对宿主机最干净。下面按路线展开。路线一async-profiler Docker镜像构建与运行 这节做完你会得到一个能分析宿主机 Java 进程 profiler 镜像。仓库docker/目录下有现成模板alpine.Dockerfile、debian.Dockerfile、amazonlinux2023.Dockerfile按你的基础镜像挑一个。先在源码根目录构建镜像# 用 alpine 模板构建镜像并打标签 docker build -f docker/alpine.Dockerfile -t async-profiler:alpine .成功的样子构建走完docker images里能看到async-profiler:alpine。然后带着目标进程的 PID 运行。--pidhost让容器直接看到宿主机的进程表# 采样宿主机上的目标 Java 进程 30 秒 docker run -it --rm --pidhost async-profiler:alpine asprof -d 30 目标PID成功的样子控制台打印Total samples和最热方法列表30 秒后命令自动退出结果直接在终端里。如果容器里报 perf 相关权限错误最后跑不动的时候一节有解法。路线二async-profiler源码编译的Linux依赖与命令 容器方案搞定后如果目标进程就在宿主机上直接本机编译更顺手。这节做完你手上会有可执行的asprof和核心库libasyncProfiler.so。依赖要求就地列清楚装齐再动手Git 2.20拉代码GCC 7 或 Clang 10编译 C/CJDK 8 且含 JRE构建期编译 Java 部分make 4.2拉源码并编译核心组件# 克隆源码仓库 git clone https://gitcode.com/GitHub_Trending/as/async-profiler cd async-profiler # 编译产物落在 build/ 目录 make成功的样子build/bin/asprof命令行入口和build/lib/libasyncProfiler.so核心库都生成了。需要离线分发时再加一步打包# 把 build/ 产物打成 linux 的 tar.gz 发布包 make release成功的样子当前目录多出async-profiler-版本-linux-架构.tar.gz拷到目标机器解压即可用。路线三macOS上编译async-profiler 这节做完你在 Mac 的build/目录里能得到可用的asprof和libasyncProfiler.dylib。流程跟 Linux 几乎一样构建脚本会自动识别当前系统不需要额外指定目标# 一次性安装 Xcode 命令行工具 xcode-select --install # 克隆后直接编译同路线二 make成功的样子build/bin/asprof生成执行不报动态库加载错误。有一点需要提前知道macOS 上看不到内核栈帧。原因是 async-profiler 的内核级采样依赖perf_events这是 Linux 内核提供的接口macOS 内核没有对应物。所以 Mac 上会自动走用户态采样路线Java 方法栈、native 栈照常记录只是追不进内核函数。分析业务代码完全够用别误以为是配错了。验证二进制包跑出第一张async-profiler火焰图✅ 这节做完你确认工具链可用并且拿到一张浏览器里能交互的火焰图。先验证版本确认二进制包完整# 查看版本信息 build/bin/asprof --version成功的样子打印出版本号如4.5没有任何报错。用jps或pgrep -a java找到目标 PID一条命令采样并出图# 采样 30 秒输出交互式火焰图 build/bin/asprof -d 30 -f flamegraph.html PID成功的样子控制台输出Total samples和占比最高的方法当前目录出现flamegraph.html。用浏览器打开就是可缩放的火焰图最宽的帧就是热点所在。跑不动的时候三类失败现象与修复⚠️ 这节帮你按现象→原因→修复快速排查不再盲目重试。1.perf_event mmap failed: Operation not permitted原因内核参数限制。Linux 4.6 起非 root 进程抓内核栈要求放宽perf_event_paranoidDocker 默认还会通过 seccomp 禁掉perf_event_open。修复宿主机上放宽内核参数永久生效写进/etc/sysctl.conf再执行sudo sysctl -p# 临时放宽 perf 内核参数 sudo sysctl kernel.perf_event_paranoid1 sudo sysctl kernel.kptr_restrict0容器内则给容器加--security-opt seccompunconfined可能还需--cap-add SYS_ADMIN实在不行退回-e ctimer用户态采样模式详见 ProfilingInContainer.md。2. 编译报错找不到 JDK 头文件原因机器上只有 JRE缺include目录下的 C 头文件。修复装完整的 JDK 开发包。# Ubuntu/Debian sudo apt install openjdk-11-jdk-headless # CentOS/RHEL sudo yum install java-11-openjdk-devel装完重新make即可无需清理。3. macOS 上看不到内核帧原因perf_events是 Linux 内核能力macOS 无此接口见路线三的说明。这是平台限制而非配置错误无需修复用户态采样照常进行。路线选对、二进制包到手、第一张火焰图已经躺在浏览器里。接下来从最宽的那一帧读起按 火焰图解读 的方法往下挖。官方入门GettingStarted.md采样参数大全ProfilerOptions.mdJava API 集成AsyncProfiler.java【免费下载链接】async-profilerSampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace perf_events项目地址: https://gitcode.com/GitHub_Trending/as/async-profiler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考