阿里巴巴开源异常测试工具
环境准备
下载linux编译后的版本 chaosblade下载
解压后可直接使用 ./blade --help
使用方法
系统级故障
进程异常
进行夯住
验证上游程序的容错能力,原理 kill -STOP 进程号
./blade create process stop --process 31653
{"code":200,"success":true,"result":"408f353fd15c0e0f"}
/blade destroy 408f353fd15c0e0f
{"code":200,"success":true,"result":"command: process stop --debug=true --process=31653"}
内存故障
root权限,mount
执行内存占用 50%,原理mount(有些机器限制了mount的root权限)
blade create mem load --mem-percent 50
磁盘故障
磁盘满
磁盘满下对系统服务的影响,验证稳定性、以及报警信息
./blade create disk fill --path /home --size 4000 (单位M)
{"code":200,"success":true,"result":"7a3d53b0e91680d9"}
blade destroy 7a3d53b0e91680d9
磁盘IO
原理:dd命令
读IO
blade create disk burn --read --path /home
写IO
blade create disk burn --write --path /home
读写IO
blade create disk burn --read --write
CPU异常
查看帮助:
./blade create cpu -h
应用例子:
./blade create cpu load --cpu-percent 80 , CPU占用80%
{"code":200,"success":true,"result":"3035526eb16d9b2b"}
result为本次异常的ID信息
查看异常注入情况
top 后 按1 ,可查看每个cpu的负载情况。负载符合设定异常
cpu资源图
删除异常
./blade d 3035526eb16d9b2b
网络异常
切记要添加 --timeout 参数,否则可能导致机器瘫痪
原理:基于linux自带的tc流量控制工具实现
tc执行必须root账号,如果进行流量控制,需要切到root执行blade命令
如果机器是64位,执行tc之前先创建一个软链,不然在用netem库时会出现错误[Netem] Unknown qdisc "netem":ln -s /usr/lib64/tc/ /usr/lib/tc
网络丢包 lost
网络延迟 delay
jvm故障
查看帮助文档
java堆内存异常
先执行 prepare 操作,挂载 java agent,执行 java 实验场景必要步骤
blade prepare jvm --pid 27313 # 设置异常的进程id
{"code":200,"success":true,"result":"af9ec083eaf32e26"}
执行进程内 CPU 满载
./blade create jvm OutOfMemoryError --area HEAP --wild-mode true --pid=27313
{"code":200,"success":true,"result":"26addd388b81cc90"}
停止实验
blade destroy 26addd388b81cc90
卸载 agent
blade revoke af9ec083eaf32e26
在内存异常关注是否oom
java进程cpu异常
./blade c jvm cfl --process 31653
所有核满载
./blade d ${ID信息}
销毁异常注入
UID、result id查询,用来停止服务
如果忘记了返回的ID信息,可以使用 ./blade status --type 进行查询,需要制定 type类型
./blade status --type create # 注入的异常
./blade status --type prepare # jvm的
远程注入异常
./blade server --help 可以在目标机器上启动http服务,其他机器通过http访问注入异常
docker
c++异常
k8s
附录
chaosblade github代码库路径
chaosblade使用:干货 | 阿里巴巴混沌测试工具ChaosBlade
chaosblade中文学习官方文档