Java profiling 数据采集
概述
light-profiling-java-collect.sh
是一个用于在 Java 应用程序上执行 profiling 的 shell 脚本。它使用 JFR 来收集应用程序的性能数据,并将其上传到 Lighthouse。
前置条件
前置条件
- 安装 light-agent
- 登录 Lighthouse 平台, 进入「数据采集」模块,获取 light-agent 安装指令和安装步骤。
环境变量说明
以下是一些重要的环境变量及其默认值和用途:
- LIGHT_WAY_URL:
- 默认值:
http://localhost:8085
- 用途: 指定 Lighthouse 平台所在的机器 ip,用于上传生成的 JFR 文件。
- 默认值:
- APP_ENV:
- 默认值:
dev
- 用途: 指定应用的环境,如 dev、staging、prod 等。
- 默认值:
- APP_VERSION:
- 默认值:
1.0.0
- 用途: 指定应用的版本号。
- 默认值:
- HOST_NAME:
- 默认值: 当前主机名
- 用途: 指定主机名称,用于标识数据来源。
- SERVICE_NAME:
- 默认值: 空
- 用途: 指定服务名称,用于标识数据来源。
- PROFILING_DURATION:
- 默认值:
60 秒
- 用途: 指定 profiling 的持续时间(以秒为单位)。
- 默认值:
- PROFILING_EVENT:
- 默认值:
cpu,alloc,wall,lock
- 用途: 指定 profiling 的事件类型,支持的事件类型包括 cpu、alloc、wall、 lock、live 等。
- 默认值:
- PROCESS_ID:
- 默认值: 空
- 用途: 指定需要采集的 Java 进程 ID,多个进程 ID 可以用逗号分隔。
- PROFILING_TAGS:
- 默认值: 空
- 用途: 指定额外的标签,用于标识和分类数据。
如何执行
-
准备环境
确保系统已安装以下工具和库:
- bash
- curl v- gzip
- uuidgen
- jps(通常随 JDK 一起安装)
-
设置可执行权限,确保脚本具有可执行权限。
cd /usr/local/light-agent/profiling/java
chmod +x light-profiling-java-collect.sh
- 设置环境变量 根据需要设置环境变量。可以在脚本中直接设置,或者在运行脚本之前设置。
export LIGHT_WAY_URL=http://your-light-trans-url:8085
export APP_ENV=prod
export APP_VERSION=2.0.0
export HOST_NAME=your-hostname
export SERVICE_NAME=your-service-name
export PROFILING_DURATION=120
export PROFILING_EVENT=cpu,alloc,wall
export PROCESS_ID=1234,5678
export PROFILING_TAGS=tag1,tag2
- 运行脚本 运行脚本以开始采集 profiling 数据。
cd /usr/local/light-agent/profiling/java
nohup ./light-profiling-java-collect.sh &
- 查看日志 脚本会在 runtime 目录下生成日志文件,每个进程 ID 对应一个日志文件。可以通过以下命令查看日志:
cd /usr/local/light-agent/profiling/java
cat logs/1234.log
- 停止脚本
脚本会无限循环运行,直到手动停止。可以使用 Ctrl+C
终止脚本。
注意事项
- 日志文件:脚本会将日志追加到 runtime 目录下的对应文件中。如果需要清空日志文件,可以手动删除或清空这些文件。
- 资源消耗:长时间运行脚本可能会占用较多系统资源,请根据实际情况调整
PROFILING_DURATION
和PROFILING_EVENT
。 - 网络连接:确保
LIGHT_WAY_URL
服务地址可达,否则上传数据会失败。Lighthouse 安装所在的机器 ip ,端口号默认是 8085。
常见问题
- Q:为什么没有生成日志文件?
A:确保 runtime 目录存在且有写权限。如果没有生成日志文件,可能是由于脚本中没有找到对应的 Java 进程。
- Q:上传数据失败怎么办?
A:检查
LIGHT_WAY_URL
服务地址是否正确,网络连接是否正常。查看脚本输出的错误信息,以便定位问题。 - Q:如何调整 profiling 事件类型?
A:通过设置 PROFILING_EVENT 环境变量来调整 profiling 事件类型。 例如 :
export PROFILING_EVENT=cpu,alloc,wall,lock
。`