Kindling-java is an attach agent to collect Java CPU / LOCK for probe which relies on async-profiler. Besides it also collect traceId / span Info generated by SkyWalking & Pinpoint agent.
Features
- [Event] Collect datas by events specified by event argument[cpu / lock / traceid].
- [Plugins] Enhance SkyWalking Agent and print traceId and span into /dev/null.
- [Plugins] Enhance Pinpoint Agent and print traceId and span into /dev/null.
# Binary will be built in agent-package/target/kindling-java-${version}.tar.gz
$ mvn clean package -Dmaven.test.skip=true
kindling-java
├── 1.0.3
│ ├── agent-core.jar
│ ├── plugin-span-pp.jar
│ ├── plugin-span-sw.jar
│ ├── plugin-traceid-pp.jar
│ └── plugin-traceid-sw.jar
├── agent-boot.jar
└── version
git clone -b kindling [email protected]:KindlingProject/async-profiler.git
cd async-profiler
./build.sh
# Copy Kindling Java into async-profiler/agent folder
tar -zxvf async-profiler-${version}-linux-x64.tar.gz
mkdir -p async-profiler/agent
tar -zxvf
mv kindling-java -zxvf $KINDLING_JAVA_FOLDER/agent-package/target/kindling-java-${version}.tar.gz -C async-profiler/agent/
cd async-profiler
We also support build in container using following command.
$ ./build.sh linux-${arch}
X64: ./build.sh linux-x64
X64-MUSL ./build.sh linux-x64-musl
ARM64 ./build.sh linux-arm64
## Attach Java Application
> ./profiler.sh start $options $pid
Options:
* -e EvnetTypes cpu / lock / traceid, all is opened by default.
* -i Collect CPU interval(nanosecond), default is 10000000.
* -j Collect CPU stack max-depth, default is 20.
Eg.
./profiler.sh start -e cpu -j 10 $pid
./profiler.sh start -e cpu -e lock $pid
## Detach Java Application
> ./profiler.sh stop $pid
## How it works
* Jcopy copy the agent and libasyncprofiler.so into container.
* Jattach attach agent into application.
* Agent start asyncProfiler by call asyncProfielr API.
* Load libasyncprofiler.so
* Execute start/stop command
* Execute print to collect CPU data at fixed rate
* Agent enhance Skywalking / Pinpoint agent by asm and print traceid into /dev/null.
* Begin / End life cycle of the trace
* When trace is dispatched into another thread, begin / end life cycle of the runnable execution.