ChaosBlade是阿里开源的一款Java虚拟机故障注入工具,它能够模拟很多Java中间件的延时和异常故障,包括RocketMQ, MySQL, Redis, Dubbo等。也可以模拟其它故障,例如CPU满载,磁盘空间不够等,这里不做介绍。
为了方便大家使用,我把ChaosBlade 1.3版本放到这个Wiki上供大家下载,原始代码和版本可以在这里找到:https://github.com/chaosblade-io/chaosblade
chaosblade-1.3.0-mac-amd64.tar.gz
chaosblade-1.3.0-linux-amd64.tar.gz
如何使用
准备
以SFTP等的方式上传到Java应用所部署的机器,将gz文件上传到某一个目录,例如/tmp,然后用命令“tar -xf chaosblade-1.3.0-linux-amd64.tar.gz" 解压。
基本步骤
- 查看当前的常用命令: ./blade -h
- attach到Java进程: ./blade prepare jvm --pid 具体的pid
- 注入错误,例如跑出异常给某个MQ topic的消费者: ./blade create throwCustomException --exception=java.lang.Exception --consumerGroup=myGroup --topic=myTopic
- 恢复JVM状态 (重要),如果不恢复,JVM将一直处于错误状态:./blade destroy uid, 其中uid可以用这个命令查到:./blade status --type create
- 如后续不再需要继续其它操作,从Java进程detach:./blade revoke uid, 其中uid可以用这个命令查到: ./blade status --type prepare
注意:以上的操作顺序很重要
第一步:先attach到当前java进行(attach Java进程时会启动chaosblade服务)
第二步:创建挡板
第三步:revoke/destroy 挡板
第四步:detach java进程
第五步:stop chaosblade服务
常用命令参考
每一个命令的每一级后面都可以加“-h“来获得具体的帮助
- RocketMQ
./blade create rocketmq delay -h
./blade create rocketmq throwCustomException -h - Redis
./blade create jedis delay -h
./blade create jedis throwCustomException -h - MySQL
./blade create mysql delay -h
./blade create mysql throwCustomException -h - Dubbo
./blade create dubbo delay -h
./blade create dubbo throwCustomException -h - 数据库连接池
./blade create druid connectionpoolfull -h - redis 异常模拟
./blade create jedis -h - 指定方法名称
./blade create jvm 创建指定代码异常
例如:create jvm throwException
参考地址:
https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/