使用脚本 bmjava 运行 Byteman

安装目录下的 bin 包含一个名为 bmjava 的脚本,可用于组合 Byteman 代理选项,并将其与 Java 命令行中的其他选项整合。命令行语法如下:

bmjava [-p port] [-h host] [ -l script|-b jar|-s jar|-nb|-nl|-nj ]* [--] javaargs

使用脚本 bmsubmit 动态提交规则

bin 目录下的 bmsubmit 脚本用于与通过 listener:true 启动的 Byteman 代理侦听器通信。支持动态上传规则、卸载规则、查询已注入的规则,以及安装帮助器类的 JAR。

命令行语法如下:

submit [-p port] [-h host] [-l|-u] [script1 . . . scriptN]
submit [-p port] [-h host] [-b|-s] jarfile1 . . .
submit [-p port] [-h host] -c
submit [-p port] [-h host] -y [prop1[=[value1]]. . .]
submit [-p port] [-h host] -v

使用脚本 bmcheck 离线检查规则

bmcheck 脚本用于在将规则注入程序前,离线解析和类型检查 Byteman 规则。命令行语法如下:

bmcheck [-cp classpath] [-p package]* script1 [. . . scriptN]

从 Java 安装和提交规则

脚本 bminstallbmsubmitbyteman-installbyteman-submit JAR 的封装,支持从任何 Java 程序调用以加载代理或规则。例如:

Byteman 代理加载和卸载生命周期

Byteman 实现了 JVMTI Java 代理 API,允许在 JVM 中优先加载并执行字节码转换:

  1. 代理加载:通过 -javaagent 启动时,代理代码在 JVM 引导时加载;通过 bminstall 动态安装时,代理代码立即加载。
  2. 规则注入listener 选项启用后,代理侦听器线程持续运行,可动态加载、卸载规则。侦听器线程为守护线程,不会中断 JVM 的运行。
  3. 代理限制:Byteman 代理只能加载一次,且无法卸载。此外,代理类必须通过系统或引导类加载器加载。

环境设置

通过以下环境变量可配置代理行为:

FunTester 原创精华

【连载】从 Java 开始性能测试


↙↙↙阅读原文可查看相关链接,并与作者交流