模拟 JVM 应用故障
Chaosd 通过 Byteman 模拟 JVM 应用故障,主要支持以下几种故障类型:
- 抛出自定义异常
- 触发垃圾回收
- 增加方法延迟
- 指定方法返回值
- 设置 Byteman 配置文件触发故障
- 增加 JVM 压力
本文主要介绍如何创建以上故障类型的 JVM 实验。
#
使用命令行模式创建实验本节介绍如何在命令行模式中创建 JVM 应用故障实验。
在创建磁盘故障实验前,可运行以下命令行查看 Chaosd 支持的 JVM 应用故障类型:
输出结果如下所示:
#
抛出自定义异常#
抛出自定义异常命令运行以下命令查看抛出自定义异常场景支持的配置:
输出如下所示:
#
抛出自定义异常相关配置说明配置项 | 配置缩写 | 说明 | 值 |
---|---|---|---|
class | c | Java 类的名称 | string 类型,必须配置 |
exception | 无 | 抛出的自定义异常 | string 类型,必须配置 |
method | m | 方法名称 | string 类型,必须配置 |
pid | 无 | 需要注入故障的 Java 进程号 | int 类型,必须配置 |
port | 无 | 附加到 Java 进程 agent 的端口号,通过该端口号将故障注入到 Java 进程 | int 类型,默认为 9288 |
uid | 无 | string 类型,实验的编号,可以不设置,Chaosd 会随机生成一个 |
#
抛出自定义异常示例输出如下所示:
在运行实验后,请注意保存实验的 uid 信息。在需要停止故障注入时使用 recover
命令结束 uid 对应的实验:
#
触发垃圾回收#
触发垃圾回收命令运行以下命令查看抛出自定义异常场景支持的配置:
#
触发垃圾回收相关配置说明配置项 | 配置缩写 | 说明 | 值 |
---|---|---|---|
pid | 无 | 需要注入故障的 Java 进程号 | int 类型,必须配置 |
port | 无 | 附加到 Java 进程 agent 的端口号,通过该端口号将故障注入到 Java 进程 | int 类型,默认为 9288 |
uid | 无 | string 类型,实验的编号,可以不设置,Chaosd 会随机生成一个 |
#
触发垃圾回收示例输出如下所示:
触发垃圾回收为一次性操作,实验不需要恢复。
#
增加方法延迟#
增加方法延迟命令输出如下所示:
#
增加方法延迟相关配置说明配置项 | 配置缩写 | 说明 | 值 |
---|---|---|---|
class | c | Java 类的名称 | string 类型,必须配置 |
latency | 无 | 增加方法的延迟时间 | int 类型,必须配置,单位为 ms |
method | m | 方法名称 | string 类型,必须配置 |
pid | 无 | 需要注入故障的 Java 进程号 | int 类型,必须配置 |
port | 无 | 附加到 Java 进程 agent 的端口号,通过该端口号将故障注入到 Java 进程 | int 类型,默认为 9288 |
uid | 无 | string 类型,实验的编号,可以不设置,Chaosd 会随机生成一个 |
#
增加方法延迟示例输出如下所示:
在运行实验后,请注意保存实验的 uid 信息。在需要停止故障注入时使用 recover
命令结束 uid 对应的实验:
#
指定方法返回值#
指定方法返回值命令#
指定方法返回值相关配置说明配置项 | 配置缩写 | 说明 | 值 |
---|---|---|---|
class | c | Java 类的名称 | string 类型,必须配置 |
method | m | 方法名称 | string 类型,必须配置 |
value | 无 | 指定方法的返回值 | string 类型,目前支持数字和字符串类型的返回值,如果为字符串,则需要使用双引号,例如:"chaos"。必须配置 |
pid | 无 | 需要注入故障的 Java 进程号 | int 类型,必须配置 |
port | 无 | 附加到 Java 进程 agent 的端口号,通过该端口号将故障注入到 Java 进程 | int 类型,默认为 9288 |
uid | 无 | string 类型,实验的编号,可以不设置,Chaosd 会随机生成一个 |
#
指定方法返回值示例输出如下所示:
在运行实验后,请注意保存实验的 uid 信息。在需要停止故障注入时,使用 recover
命令来结束 uid 对应的实验:
#
设置 Byteman 配置文件触发故障通过 Byteman 规则配置文件来设置故障规则,然后使用 Chaosd 指定该文件路径来注入故障。关于 Byteman 的规则配置,请参考 byteman-rule-language。
#
设置 Byteman 配置文件触发故障命令输出如下所示:
#
设置 Byteman 配置文件触发故障相关配置说明配置项 | 配置缩写 | 说明 | 值 |
---|---|---|---|
path | 无 | 指定 Byteman 配置文件的路径 | string 类型,必须配置 |
pid | 无 | 需要注入故障的 Java 进程号 | int 类型,必须配置 |
port | 无 | 附加到 Java 进程 agent 的端口号,通过该端口号将故障注入到 Java 进程 | int 类型,默认为 9288 |
uid | 无 | string 类型,实验的编号,可以不设置,Chaosd 会随机生成一个 |
#
设置 Byteman 配置文件触发故障示例首先根据具体的 Java 程序,并参考 byteman-rule-language 编写一个规则配置文件,例如:
将该文件保存到文件 return.btm
,然后运行以下命令注入故障:
输出如下所示:
在运行实验后,请注意保存实验的 uid 信息。在需要停止故障注入时,使用 recover
命令来结束 uid 对应的实验:
#
增加 JVM 压力#
增加 JVM 压力命令输出如下所示:
#
增加 JVM 压力相关配置说明配置项 | 配置缩写 | 说明 | 值 |
---|---|---|---|
cpu-count | 无 | 增加 CPU 压力所使用的 CPU 核的数量 | int 类型,cpu-count 和 mem-size 必须配置一个 |
mem-size | 无 | 指定占用内存的大小 | int 类型,单位为 MB,cpu-count 和 mem-size 必须配置一个 |
pid | 无 | 需要注入故障的 Java 进程号 | int 类型,必须配置 |
port | 无 | 附加到 Java 进程 agent 的端口号,通过该端口号将故障注入到 Java 进程 | int 类型,默认为 9288 |
uid | 无 | string 类型,实验的编号,可以不设置,Chaosd 会随机生成一个 |
#
增加 JVM 压力示例输出如下所示:
在运行实验后,请注意保存实验的 uid 信息。在需要停止故障注入时,使用 recover
命令来结束 uid 对应的实验:
#
使用服务模式创建实验(正在持续更新中)