Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[メモ]JBoss ASでBytemanを使う

ミドルウェアの内部動作をトレースするためによく使うので手順を残しておきます。

1 前提

  • JBossAS 7系

2 インストール

$ wget http://downloads.jboss.org/byteman/2.2.1/byteman-download-2.2.1-bin.zip
$ unzip byteman-download-2.2.1-bin.zip

3 JBossASプロセスへのアタッチ

$ export BYTEMAN_HOME=`pwd`/byteman-download-2.2.1
$ export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64
$ JBOSS_PID=`ps -ef | grep [j]boss-modules.jar | awk '{print $2}'`
$ ${BYTEMAN_HOME}/bin/bminstall.sh -b ${JBOSS_PID}

4 トレース用スクリプトの作成

JBossASサーバソケット受信バッファーサイズを調べるスクリプト trace_socket_receive_buffer_size.btm を作成する

RULE trace http ReceiveBufferSize
CLASS org.apache.tomcat.util.net.JIoEndpoint
METHOD processSocket
AT ENTRY
BIND socket = $1
IF TRUE
DO
  traceln("socket.getReceiveBufferSize() = " + socket.getReceiveBufferSize()), traceStack()
ENDRULE

5 スクリプトの実行

$ ${BYTEMAN_HOME}/bin/bmsubmit.sh trace_socket_receive_buffer_size.btm

Comments