chaosblade安装部署 https://alden.blog.csdn.net/article/details/129941689
https://github.com/chaosblade-io/chaosblade/tags
[root@vm ~]# wget https://github.com/chaosblade-io/chaosblade/releases/download/v1.3.0/chaosblade-1.3.0-linux-amd64.tar.gz
[root@vm ~]# tar xf chaosblade-1.3.0-linux-amd64.tar.gz
[root@vm ~]# mv chaosblade-1.3.0/ /opt/
[root@vm ~]# cd /opt/chaosblade-1.3.0/;ls
bin blade lib yaml
[root@vm chaosblade-1.3.0]# ./blade v
version: 1.3.0
env: #1 SMP Tue Mar 23 09:27:39 UTC 2021 x86_64
build-time: Wed Aug 4 12:52:28 UTC 2021
[root@vm chaosblade-1.3.0]# ./blade -h #-h #-d DEBUG 执行模式
An easy to use and powerful chaos engineering experiment toolkit
Usage:
blade [command]
Available Commands:
check Check the environment for chaosblade
create Create a chaos engineering experiment
destroy Destroy a chaos experiment
help Help about any command
prepare Prepare to experiment
query Query the parameter values required for chaos experiments
revoke Undo chaos engineering experiment preparation
server Server mode starts, exposes web services
status Query preparation stage or experiment status #状态查看
version Print version info
[root@vm chaosblade-1.3.0]# ./blade create -h
...
Examples:
blade create cpu load --cpu-percent 60
Available Commands:
cplus C++ chaos experiments
cpu Cpu experiment
disk Disk experiment
docker Docker experiment
druid Experiment with the Druid
dubbo Experiment with the Dubbo
es ElasticSearch experiment!
file File experiment
gateway gateway experiment!
...
[root@vm chaosblade-1.3.0]# ./blade create cpu load --cpu-percent 60
{"code":200,"success":true,"result":"9c6746a66b0afe22"}
[root@vm chaosblade-1.3.0]# top # 1 查看cpu是否拉起
[root@vm chaosblade-1.3.0]# ps -ef |grep blade
root 1693 ... /opt/chaosblade-1.3.0/bin/chaos_burncpu --nohup --cpu-count 2 --cpu-percent 60 --climb-time 0
[root@vm chaosblade-1.3.0]# kill -9 1693
[root@vm chaosblade-1.3.0]# top
[root@vm chaosblade-1.3.0]# blade status --type create #查询创建的实验
{
"code": 200,
"success": true,
"result": [
{
"Uid": "cpupercent",
"Command": "cpu",
"SubCommand": "fullload",
"Flag": " --uid=cpupercent --cpu-percent=60",
"Status": "Success",
"Error": "",...
后台启动 blade,可通过 http 调用
$ blade server start --port 8080
$ blade server stop
#触发 CPU 负载 50% 场景
$ curl "http://IP:8080/chaosblade?cmd=create%20cpu%20load%20--cpu-percent%2050"
$ curl "http://IP:8080/chaosblade?cmd=destroy%result-id"
[root@vm chaosblade-1.3.0]# blade create cpu -h
Cpu experiment, for example full load
Usage:
blade create cpu [flags]
blade create cpu [command]
Available Commands:
fullload cpu load #Commands
...
[root@vm chaosblade-1.3.0]# blade create cpu load -h
Create chaos engineering experiments with CPU load
Usage:
blade create cpu fullload
Aliases:
fullload, fl, load
Examples:
# Create a CPU full load experiment
blade create cpu load
#Specifies two random core's full load
blade create cpu load --cpu-percent 60 --cpu-count 2
# Specifies that the core is full load with index 0, 3, and that the core's index starts at 0
blade create cpu load --cpu-list 0,3
# Specify the core full load of indexes 1-3
blade create cpu load --cpu-list 1-3
# Specified percentage load
blade create cpu load --cpu-percent 60
Flags:
--blade-release string Blade release package,use this flag when the channel is ssh
--channel string Select the channel for execution, and you can now select SSH
--climb-time string durations(s) to climb
--cpu-count string Cpu count
--cpu-list string CPUs in which to allow burning (0-3 or 1,3)
--cpu-percent string percent of burn CPU (0-100)
...
[root@vm chaosblade-1.3.0]# blade create cpu load
{"code":200,"success":true,"result":"5abf89a48e9d5147"} #注意这个result
[root@vm chaosblade-1.3.0]# top #查看
Tasks: 109 total, 2 running, 107 sleeping, 0 stopped, 0 zombie
%Cpu0 : 99.7 us, 0.0 sy, 0.0 ni, 0.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
[root@vm chaosblade-1.3.0]# blade destroy 5abf89a48e9d5147
{"code":200,"success":true,"result":{"target":"cpu","action":"fullload"}}
blade create cpu load --cpu-count 1
blade create cpu load --cpu-percent 60
blade create cpu load --cpu-list 0
blade create cpu load --cpu-list 0,1
Servlet 是 Java 的 web 的接口规范,Java web 服务器都遵循此规范实现。本场景主要模拟 Java Web 请求延迟、异常场景。servlet 通用参数
--effect-count string 影响的请求条数
--effect-percent string 影响的请求百分比
--method string HTTP 请求类型, 例如: GET, POST, or PUT.
--pathinfo string 已废弃
--pid string java进程号
--process string java进程名
--querystring string 请求参数,例如http://localhost:8080/dubbodemo/async?name=friend&timeout=2000 中 querystring的值是 name=friend&timeout=2000
--requestpath string 请求 URI,不包含 Context 部分,例如 http://localhost:8080/dubbodemo/async?name=friend&timeout=2000,则 requestpath 的值是 /async,注意要带 /
--servletpath string 已废弃
#tomcat
https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.89/bin/apache-tomcat-8.5.89.tar.gz
[root@vm ~]# tar xf apache-tomcat-8.5.89.tar.gz
[root@vm ~]# mv apache-tomcat-8.5.89/ /opt/tomcat
[root@vm ~]# cd /opt/tomcat/
[root@vm tomcat]# bin/catalina.sh start
[root@vm tomcat]# echo "tomcat-test~~~~" > webapps/ROOT/index.html
http://localhost:8080 tomcat-test~~~~
--exception string 异常类,带全包名,必须继承 java.lang.Exception 或 java.lang.Exception 本身
--exception-message string 指定异常类信息,默认值是 chaosblade-mock-exception
[root@vm tomcat]# ps -ef |grep java
root 2245 1 ... /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/...
[root@vm tomcat]# blade c servlet throwCustomException --exception org.springframework.beans.BeansException --exception-message mock-beans-exception --requestpath / --effect-count 3 --pid 2245
访问http://localhost:8080 # HTTP状态 500 - 内部服务器错误, 3次之后访问正常
--time string 延迟时间,单位是毫秒,必填项
--offset string 延迟上下浮动时间,例如 --time 3000 --offset 1000,延迟时间的取值范围是 2000-4000 毫秒
#请求延迟 3 秒,影响 2 条请求
blade c servlet delay --time 3000 --requestpath /user --effect-count 2
#请求参数是 name=family,延迟 2 秒,延迟时间上下浮动 1 秒,影响范围是 50% 的请求,同时开启 debug 日志
blade c servlet delay --time 2000 --offset 1000 --querystring name=family --effect-percent 50 --debug
#实验原理使用dd 命令实现
#开启一个终端,监控读操作
[root@vm ~]# iostat -x -m 2 |grep -E "Device|sda"
#开启一个终端创建任务
[root@vm ~]# blade create disk burn --read --path /home #不指定 path,默认值是 /
{"code":200,"success":true,"result":"496d79e6dc4e6ee8"}
[root@vm ~]# ls /home
chaos_burnio.read #600MB,循环读,destroy后自动删除
[root@vm ~]# blade destroy 496d79e6dc4e6ee8
# 主要看 rMB/s wMB/s %util
[root@vm ~]# iostat -x -m 2 |grep -E "Device|sda"
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.04 0.79 0.23 0.04 0.00 90.37 0.00 3.19 2.85 4.36 0.78 0.08
...
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 23.00 579.50 2.24 69.05 242.32 2.29 3.81 2.93 3.84 0.20 12.05
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 1298.50 1928.50 162.19 231.06 249.57 14.03 4.33 5.29 3.69 0.19 61.60
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 6690.50 0.00 836.00 0.00 255.90 34.23 5.12 5.12 0.00 0.15 98.95
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 7096.00 0.00 886.63 0.00 255.89 32.81 4.64 4.64 0.00 0.14 99.25
...
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
blade create disk burn --write --path /home #写
blade create disk burn --read --write --path /home #读写
blade create disk fill
--path string 需要填充的目录,默认值是 /
--size string 需要填充的文件大小,单位是 M,取值是整数,例如 --size 1024
--reserve string 保留磁盘大小,单位是MB。取值是不包含单位的正整数,例如 --reserve 1024。如果 size、percent、reserve 参数都存在,优先级是 percent > reserve > size
--percent string 指定磁盘使用率,取值是不带%号的正整数,例如 --percent 80
--retain-handle 是否保留填充
--timeout string 设定运行时长,单位是秒,通用参数
#实验原理使用 fallocate、dd 命令实现
blade create disk fill --path /home --size 40000 #填充 40G
blade c disk fill --path /home --percent 80 --retain-handle #按百分比填充磁盘
blade c disk fill --path /home --reserve 1024 #保留磁盘大小
[root@vm ~]# df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 8.3G 8.8G 49% /
[root@vm ~]# blade c disk fill --path /home --percent 60 --retain-handle
{"code":200,"success":true,"result":"297b0169777a3903"}
[root@vm ~]# df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 11G 6.9G 60% /
[root@vm ~]# ls /home/
chaos_filldisk.log.dat
[root@vm ~]# blade destroy 297b0169777a3903
[root@vm ~]# df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 8.3G 8.8G 49% /
blade create mem load
--mem-percent string 内存使用率,取值是 0 到 100 的整数
--mode string 内存占用模式,有 ram 和 cache 两种,例如 --mode ram。ram 采用代码实现,可控制占用速率,优先推荐此模式;cache 是通过挂载tmpfs实现;默认值是 --mode cache
--reserve string 保留内存的大小,单位是MB,如果 mem-percent 参数存在,则优先使用 mem-percent 参数
--rate string 内存占用速率,单位是 MB/S,仅在 --mode ram 时生效
--timeout string 设定运行时长,单位是秒,通用参数
#ram 模式采用代码申请内存实现 cache 模式采用 dd、mount 命令实现,挂载 tmpfs 并且进行文件填充
#新开一个终端观察
[root@vm ~]# sar -r 1 60 # 观察 %memused
[root@vm ~]# blade c mem load --mode ram --mem-percent 50 #执行内存占用 50%
blade c mem load --mode ram --reserve 200 --rate 100 #每秒100M燃烧内存,直到剩下200M
blade create network delay
可以指定网卡、本地端口、远程端口、目标 IP 延迟。
--destination-ip string 目标 IP. 支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。
--exclude-port string 排除掉的端口,默认会忽略掉通信的对端端口,目的是保留通信可用。可以指定多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。 这个参数不能与 --local-port 或者 --remote-port 参数一起使用
--exclude-ip string 排除受影响的 IP,支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。
--interface string 网卡设备,例如 eth0 (必要参数)
--local-port string 本地端口,一般是本机暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080
--offset string 延迟时间上下浮动的值, 单位是毫秒
--remote-port string 远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080
--time string 延迟时间,单位是毫秒 (必要参数)
--force 强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用
--ignore-peer-port 针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口
--timeout string 设定运行时长,单位是秒,通用参数
#实现原理 tc 实现,(python工具)
#
[root@vm ~]# docker run -itd -p 80:80 nginx:1.21.1
[root@vm ~]# blade create network delay --time 3000 --offset 1000 --interface enp0s3 --local-port 80
#浏览器访问会发现等待了很久~
#访问本机 8080 和 8081 端口延迟 3 秒,延迟时间上下浮动 1 秒
blade create network delay --time 3000 --offset 1000 --interface eth0 --local-port 8080,8081
#本机访问外部 14.119.104.254 机器 80 端口延迟 3 秒
blade create network delay --time 3000 --interface eth0 --remote-port 80 --destination-ip 14.119.104.254
[root@vm ~]# curl -sIL -w "%{http_code}\n" -o /dev/null --connect-timeout 1 myip:443
400
[root@vm ~]# blade create network delay --time 3000 --interface enp0s3 --remote-port 443 --destination-ip myip
[root@vm ~]# curl -sIL -w "%{http_code}\n" -o /dev/null --connect-timeout 1 myip:443
000 #1秒访问失败
[root@vm ~]# curl -sIL -w "%{http_code}\n" -o /dev/null --connect-timeout 5 myip:443
400 #5秒能访问到ok
#对整个网卡 eth0 做 5 秒延迟,排除 22 和 8000到8080 端口
blade create network delay --time 5000 --interface eth0 --exclude-port 22,8000-8080
blade create network dns
--domain string 域名 (必要参数)
--ip string 映射的 ip (必要参数)
--timeout string 设定运行时长,单位是秒,通用参数
#实现原理 修改 /etc/hosts
#www.baidu.com 域名不可访问
[root@vm ~]# blade create network dns --domain www.baidu.com --ip 10.1.0.1
[root@vm ~]# ping www.baidu.com #发现访问不通。
blade create network drop
网络屏蔽实验场景,同网络丢包 100%,后续会使用丢包 100% 替代。两者的区别是底层实现机制不一样,而且网络屏蔽只支持端口,不支持整个网卡,具有局限性,建议使用网络丢包 100% 来替代此命令。
可以指定网卡、本地端口、远程端口、目标 IP 丢包。
--destination-ip string 目标IP,eg:192.168.1.0/24,192.168.1.1,192.168.2.1。
--exclude-port string 排除掉的端口,默认会忽略掉通信的对端端口,例如 22,8000 或者 8000-8010。 这个参数不能与 --local-port 或者 --remote-port 参数一起使用
--exclude-ip string 排除受影响的 IP,
--interface string 网卡设备,例如 eth0 (必要参数)
--local-port string 本地端口,一般是本机暴露服务的端口。可以指定多个,例如 80,8000-8080
--percent string 丢包百分比,取值在[0, 100]的正整数 (必要参数)
--remote-port string 远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,
--force 强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用
--ignore-peer-port 针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口
--timeout string 设定运行时长,单位是秒,通用参数
#访问本机 8080 和 8081 端口丢包率 70%
blade create network loss --percent 70 --interface eth0 --local-port 8080,8081
#本机访问外部 14.215.177.39 机器(ping www.baidu.com 获取到的 IP)80 端口丢包率 100%
blade create network loss --percent 100 --interface eth0 --remote-port 80 --destination-ip 14.215.177.39
#对整个网卡 eth0 做 60% 的丢包,排除 22 和 8000到8080 端口
blade create network loss --percent 60 --interface eth0 --exclude-port 22,8000-8080
#实现整个网卡不可访问 20 秒。
执行完成下面命令后,当前的网络会中断掉,20 秒后恢复。切记!!勿忘 --timeout 参数
blade create network loss --percent 100 --interface eth0 --timeout 20
blade create network corrupt
参数通lost
[root@vm ~]# blade create network corrupt --percent 90 --destination-ip 12.71.14.40 --interface enp0s3
[root@vm ~]# ping 12.71.14.40
...
16 packets transmitted, 7 received, 56% packet loss, time 15980ms#ping时间较短,延长观察
blade create network reorder
--destination-ip string 目标 IP.
--exclude-port string 排除掉的端口,默认会忽略掉通信的对端端口,可以指定多个
--exclude-ip string 排除受影响的 IP,
--interface string 网卡设备,例如 eth0 (必要参数)
--local-port string 本地端口,一般是本机暴露服务的端口例如 80,8000-8080
--offset string 延迟时间上下浮动的值, 单位是毫秒
--remote-port string 远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,例如 80,8000-8080
--correlation string 和上一包的相关性,取值在 0~100,必要参数,例如 --correlation 70
--gap string 包序列大小,取值是正整数,例如 --gap 5
--percent string 立即发送百分比,取值是不带%号的正整数,例如 --percent 50,(必要参数)
--time string 网络包延迟时间,单位是毫秒,默认值是 10,取值时正整数
--force 强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用
--ignore-peer-port 针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口
--timeout string 设定运行时长,单位是秒,通用参数
blade c network reorder --correlation 80 --percent 50 --gap 2 --time 500 --interface eth0 --destination-ip 10.2.0.11
ping 10.2.0.11 -A #出现包乱序的情况 拿个外网的IP测
blade create network duplicate
$ blade create network duplicate --percent 80 --destination-ip 180.101.49.12 --interface eth0
#测试失败,再议
ping 180.101.49.12
64 bytes from 180.101.49.12: icmp_seq=65 ttl=50 time=9.73 ms
64 bytes from 180.101.49.12: icmp_seq=65 ttl=50 time=9.74 ms (DUP!)
blade create network occupy
--port string 指定被占用的端口,(必填项)
--force 强制占用此端口,会将已使用此端口的进程杀掉
--timeout string 设定运行时长,单位是秒,通用参数
[root@vm ~]# blade c network occupy --port 8080 --force
blade create script delay
通过指定脚本和函数执行延迟场景。
--time string 延迟时间,单位是毫秒(必要参数)
--timeout string 设定运行时长,单位是秒,通用参数
--file string 脚本路径(必要参数)
--function-name string 脚本中的函数名(必要参数)
blade create script delay --time 10000 --file test.sh --function-name start0
blade create script exit
通过指定脚本和函数执行退出场景。
--exit-code string 退出码,默认值是 1
--exit-message string 退出信息
--timeout string 设定运行时长,单位是秒,通用参数
--file string 脚本路径(必要参数)
--function-name string 脚本中的函数名(必要参数)
blade create script exit --exit-code 1 --exit-message this-is-error-message --file test.sh --function-name start0
{"code":200,"success":true,"result":"d8a016b96380d7f3"}
blade create docker
#blade create docker cpu
[root@vm ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8bb3e2d2444f centos:7.9.2009-base "/usr/sbin/init" 11 days ago Up About an hour 22/tcp os1
[root@vm ~]# mv chaosblade-1.3.0-linux-amd64.tar.gz chaosblade-1.3.0.tar.gz
[root@vm ~]# blade create docker cpu fullload --cpu-percent 50 --chaosblade-release /root/chaosblade-1.3.0.tar.gz --container-id 8bb3e2d2444f
#[root@vm ~]# docker exec -it 8bb3e2d2444f bash 上面的操作把blade的包放进容器了
#[root@centos /]# ls /opt/chaosblade/
#bin blade chaosblade.dat lib logs yaml
#top查看负载
#
#blade create docker network delay/loss/dns
--container-id string 目标容器 ID
--docker-endpoint string Docker server 地址,默认为本地的 /var/run/docker.sock
--image-repo string 默认拉取chaosblade-tool,需登录registry.cn-hangzhou.aliyuncs.com/chaosblade
#实验准备
[root@vm ~]# docker run -d --net uat --ip 10.2.0.11 --name os1 --hostname os1 --privileged=true centos:7.9.2009-base /usr/sbin/init#
# 安装httpd服务实验
[root@vm ~]# docker ps -q
8bb3e2d2444f
[root@vm ~]# docker inspect 8bb3e2d2444f | grep -i ipaddress
"IPAddress": "10.2.0.11",
[root@vm ~]# docker exec -it os1 ip a
...
7: eth0@if8: #网卡名 eth0
#创建延时
[root@vm ~]# blade create docker network delay --time 3000 --interface eth0 --local-port 80 --container-id 8bb3e2d2444f
[root@vm ~]# docker images | grep chaos #默认拉区chaosblade-tool 镜像
registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-tool latest
[root@vm ~]# curl 10.2.0.11 #需要等待
[root@vm ~]# curl -sIL -w "%{http_code}\n" -o /dev/null --connect-timeout 1 10.2.0.11
000
[root@vm ~]# curl -sIL -w "%{http_code}\n" -o /dev/null --connect-timeout 5 10.2.0.11
200
#这俩操作,执行balde destroy ID 不能回到先前状态
#blade create docker process
[root@vm ~]# blade create docker process kill --process httpd --chaosblade-release /root/chaosblade-1.3.0.tar.gz --container-id 8bb3e2d2444f
[root@vm ~]# curl os1
curl: (7) Failed connect to os1:80; Connection refused #httpd被杀死了
#blade create docker container
[root@vm ~]# blade create docker container remove --container-id #容器被删除
blade prepare jvm
-j, --javaHome string 指定 JAVA_HOME 路径
--pid string java 进程ID
-P, --port int java agent 暴露服务的本地端口,用于下发实验命令
-p, --process string java 进程关键词,用于定位 java 进程
-d, --debug 开启 debug 模式
root@vm ~]# tar xf apache-tomcat-8.5.83.tar.gz -C /opt/
[root@vm ~]# cd /opt/apache-tomcat-8.5.83/
[root@vm apache-tomcat-8.5.83]# mkdir -p conf/Catalina/localhost/
[root@vm apache-tomcat-8.5.83]# vim conf/tomcat-users.xml
...
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="admin,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"/>
...
[root@vm apache-tomcat-8.5.83]# vi conf/Catalina/localhost/manager.xml
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
[root@vm apache-tomcat-8.5.83]# ./bin/startup.sh
[root@vm apache-tomcat-8.5.83]# ps -ef | grep tomcat
root 4534 0 2 06:35 pts/0 00:00:07 /usr/bin/java
[root@vm apache-tomcat-8.5.83]# blade create jvm --help
blade prepare jvm --pid 26652 #指定 pid 执行 java agent 挂载
blade revoke 2552c05c6066dde5 #卸载
blade status --type prepare --target jvm #查询
blade create jvm cpufullload
[root@vm apache-tomcat-8.5.83]# blade prepare jvm --pid 4534
#top 终端查看,创建前后的负载
[root@vm apache-tomcat-8.5.83]# blade create jvm cpufullload --pid 4534
[root@vm apache-tomcat-8.5.83]# blade destroy a095c0a0308dbaa3
blade create jvm OutOfMemoryError
[root@vm apache-tomcat-8.5.83]# blade create jvm oom --area HEAP --wild-mode true --pid 4534
#top 终端查看 内存飙高
还支持一下操作
#java功底不够了,不研究了
blade create jvm delay #延迟故障
blade create jvm return #返回更改
blade create jvm script #编写 java 或者 groovy 脚本实现复杂的故障场景
blade create jvm CodeCacheFilling #CodeCache满会导致JVM关闭JIT编译
blade create jvm throwCustomException #抛自定义异常
注意使用操作文档
[root@vm opt]# blade create jvm delay --help
The Java method delays the experiment
Usage:
blade create jvm delay #注意 (required) 项
Examples:
# Inject a 4-second delay failure on the sayHello method
blade create jvm delay --time 4000 --classname=com.example.controller.DubboController --methodname=sayHello
Flags:
--after Specify the method after event
--classname string The class name with package (required)
--effect-count string The count of chaos experiment in effect
--effect-percent string The percent of chaos experiment in effect
-h, --help help for delay
--javaHome string Specify the JAVA_HOME variable to loading jre lib
--methodname string The method name (required)
--offset string delay offset for the time
--pid string The process id
--process string Application process name
--refresh Uninstall java agent and reload it
--time string delay time (required)
--timeout string set timeout for experiment in seconds