chaosblade混沌测试

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 server使用

后台启动 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"

cpu 负载

创建帮助
[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

java-web

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~~~~
Java web 请求异常
--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次之后访问正常
Java web 请求延迟
--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

blade create disk burn

#实验原理使用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    内存使用率,取值是 0100 的整数
--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

你可能感兴趣的:(混沌测试,linux,运维)