🌿

Spring BootアプリケーションをBytemanでデバッグする

2023/02/18に公開

概要

Spring BootアプリケーションをBytemanでデバッグする方法(というかコマンド)のメモです。
Bytemanに限らずエージェント全般に適用できる内容です。

https://byteman.jboss.org/index.html

ここから先は次の事項を前提とします。

  • 環境変数BYTEMAN_HOMEが指すパスにBytemanが置かれていること
  • カレントディレクトリのdemo.btmにBytemanスクリプトが書かれていること

Spring Boot Maven Pluginで実行する場合

Spring Boot Maven Pluginのrunゴールにagentsというパラメーターがあり、それを使用してエージェントを設定できます。

mvn spring-boot:run \
  -Dspring-boot.run.agents="$BYTEMAN_HOME/lib/byteman.jar=script:demo.btm"

実行可能JARで実行する場合

普通にjavaコマンド-javaagentパラメーターで設定します。

java -javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:demo.btm \
  -jar target/myapp.jar

コンテナで実行する場合

Spring Boot Maven Pluginのbuild-imageゴールで特に設定(ビルダーやビルドパック)を変えずにコンテナイメージを生成しているとします。
環境変数JAVA_TOOL_OPTIONSを使用して-javaagentパラメーターで設定できます。

docker run --rm \
  -e JAVA_TOOL_OPTIONS="-javaagent:/tmp/byteman.jar=script:/tmp/demo.btm" \
  -v $BYTEMAN_HOME/lib/byteman.jar:/tmp/byteman.jar:ro \
  -v $PWD/demo.btm:/tmp/demo.btm:ro myapp:latest

以上です。

Discussion