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 toolkitUsage:blade [command]Available Commands:check       Check the environment for chaosbladecreate      Create a chaos engineering experimentdestroy     Destroy a chaos experimenthelp        Help about any commandprepare     Prepare to experimentquery       Query the parameter values required for chaos experimentsrevoke      Undo chaos engineering experiment preparationserver      Server mode starts, exposes web servicesstatus      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 60Available Commands:cplus       C++ chaos experimentscpu         Cpu experimentdisk        Disk experimentdocker      Docker experimentdruid       Experiment with the Druiddubbo       Experiment with the Dubboes          ElasticSearch experiment!file        File experimentgateway     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 loadUsage: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 loadUsage:blade create cpu fullloadAliases:fullload, fl, loadExamples:# 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 60Flags:--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.htmlhttp://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 experimentUsage: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=sayHelloFlags:--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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程实际应用实例:洗车店会员管理系统操作教程

一、前言 洗车店在会员管理有时候需要一卡多用&#xff0c;基本也不需要做卡&#xff0c;直接报手机号或车牌号即可完成电子会员卡录入。 下面以 佳易王洗车店会员管理系统软件为例说明&#xff0c; 软件试用版下载或技术支持可以点击下方的官网卡片 如图&#xff1a;这个卡…

【教程】Autojs脚本实现暂停和超时重启功能的思路和示例代码

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景介绍 autojs本身不支持暂停脚本&#xff0c;现有网上大部分最直接的做法就是在每条语句后面添加检查是否暂停。当脚本功能和代码量非常打的时候&#xff0c;每一条语句后面都加检测&#xff0c;未免不太现实。…

如何一次性scp多个文件到远程机器上

如题&#xff0c;如果想要使用 scp 一次性复制多个文件到远程机器上&#xff0c;可以用以下命令实现&#xff0c;格式如下&#xff1a; $ scp -P port local_file1 local_file2 ... usernameremote_host:remote_path其中&#xff1a; port 是远程主机的指定端口号&#xff0c…

Nginx-nginx 反向代理方式(超详细)

当涉及到提高网站的性能和可用性时&#xff0c;负载均衡和反向代理是非常关键的组件。Nginx是一款高性能的Web服务器和反向代理服务器&#xff0c;它提供了强大的负载均衡功能。下面是关于如何使用Nginx实现反向代理的一些基本步骤&#xff1a; 1.什么是反向代理&#xff1f;&…

Uniapp小程序通过camera组件实现视频拍摄

uni中可以通过调用api的方式去拍摄或者是选择相册的视频&#xff0c;但是在这里我们不采取这种方式&#xff0c;因为调用api的方式&#xff0c;必须跳转&#xff0c;而我们需要在页面中实现&#xff0c;下面看下具体步骤吧... <camera v-if"!srcUrl && showCam…

TypeScript 使用泛型 接收后端的统一返回对象

后端往往在返回数据的时候都会有一个固定的格式&#xff0c;来搭配前端的数据接收工作。 比如&#xff1a; // 返回格式 一 {code:200,message:success,data:{name:勿语,age:18} } // 返回格式 二 {code:200,message:success,data:dawkn23n1io2nkfdawbdkbwfa }从返回结果来看…

RFID技术在物流仓储解决方案中的应用

行业现状 当前市场竞争日益激烈&#xff0c;提高生产效率、降低运营成本对企业至关重要。仓库和物流管理在各行业中广泛应用。建立完善的仓库管理流程&#xff0c;提高仓库周转率&#xff0c;减少资金占用&#xff0c;实现资产变现&#xff0c;降低仓库淘汰成本&#xff0c;是…

c++面经总结

C基础语法 C和c的区别 c中new和delete是对内存分配的运算符&#xff0c;取代了c中的malloc和free 标准c中的字符串类取代了标准c函数库头文件中的字符数组处理函数(c中没有字符串类型). 在c中&#xff0c;允许有相同的函数名&#xff0c;不过他们的参数类型不能完全相同&…

【状态机FSM 序列检测 饮料机_2023.12.1】

同步状态机 概念 同步状态机&#xff08;同一脉冲边沿触发&#xff09;&#xff1a;有限个离散状态及某状之间的转移 异步状态机无法综合 分类 Moore状态机 只和状态有关&#xff0c;与输入无关 Mealy状态机 和状态和输入都有关 Mealy型比Moore型少一个状态 结构 由状态寄…

Tomcat从认识安装到详细使用

文章目录 一.什么是Tomact?二.Tomcat的安装1.下载安装包2.一键下载3.打开Tomcat进行测试4.解决Tomcat中文服务器乱码 三.Tomcat基本使用1.启动与关闭Tomcat2.Tomcat部署项目与浏览器访问项目 四.Tomcat操作中的常见问题1.启动Tomcat后&#xff0c;启动窗口一闪而过&#xff1f…

排序 | 冒泡插入希尔选择堆快排归并计数排序

排序 | 冒泡插入希尔选择堆快排归并计数排序 文章目录 排序 | 冒泡插入希尔选择堆快排归并计数排序冒泡排序插入排序希尔排序选择排序堆排序快速排序--交换排序三数取中快速排序hoare版本快速排序挖坑法快速排序前后指针法 快速排序--非递归实现归并排序归并排序非递归实现非比…

【AutoDL】使用云服务器跑深度学习代码

一、AutoDL租用服务器 1.选用服务器 1.算力市场 租用服务器&#xff0c;选择自己心仪的服务器 2.镜像 可以选择一些基础的镜像&#xff0c;社区镜像里是git上有的环境。 3.上传文件 在文件存储中&#xff0c;选择上传的区&#xff0c;在右边点击上传&#xff0c;选择自己的文…

Dockerfile创建镜像LNMP+WordPress

目录 实验部署 nginx 配置mysql 配置php 实验部署 INMPwordpress nginx 172.111.0.10 docker-nginx mysql 172.111.0.20 docker-mysql php 172.111.0.30 docker-php nginx 关闭防火墙和安全机制在opt目录创建nginx MySQL php目录 cd nginx mysql php vim Dockerfile#声…

VueRouter的编程式导航和导航守卫

编程式导航 Vue Router 提供了编程式导航的方法&#xff0c;这意味着你可以在 JavaScript 中编写代码来导航到不同的路由。这通常在处理用户交互或其他异步操作时很有用。 要实现编程式导航&#xff0c;你可以使用 this.$router.push() 方法。这个方法接受一个路由对象或者一…

Arduino中读取SD卡文本文件数据

1、硬件 2、代码 #include <SD.h> #include <SPI.h> // needed for Arduino versions later than 0018const long _1000msTime 1000; // 1000 milli seconds unsigned long _1000msLastTime;File myFile; int date; int Lastdate; String strDate;//…

什么是分布式光伏发电系统?哪些地点适合建设?

随着全球环保意识的提高&#xff0c;光伏发电以发电效率高、环境污染小和能源来源丰富等优势脱颖而出。光伏发电是指利用太阳能辐射直接转变成电能的发电方式&#xff0c;能够有效帮助减少二氧化碳。 分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式以用户侧自发自…

YOLOv5独家原创改进:SPPF自研创新 | SPPF与感知大内核卷积UniRepLK结合,大kernel+非膨胀卷积提升感受野

💡💡💡本文自研创新改进:SPPF与感知大内核卷积UniRepLK结合,大kernel+非膨胀卷积,使SPPF增加大kernel,提升感受野,最终提升检测精度 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),…

垃圾回收 (GC) 在 .NET Core 中是如何工作的?(二)

接上一篇文章垃圾回收 (GC) 在 .NET Core 中是如何工作的&#xff1f;-CSDN博客 GC 会分配堆段&#xff0c;其中每个段都是一系列连续的内存。 置于堆中的对象归类为 3 个代系之一&#xff1a;0、1 或 2。 代系可确定 GC 尝试在应用不再引用的托管对象上释放内存的频率。 编号…

【亚马逊云科技】使用Vscode Amazon-Q完成GUI界面粉笔脚本开发

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊云科技-Q&#xff0c;可以快速获得紧迫问题的相关答案&#xff0c;解决问题…

如何选择适合自己的API:实用指南

导语&#xff1a;在当今的软件开发世界中&#xff0c;API&#xff08;应用程序接口&#xff09;已成为数据传输和功能调用的重要桥梁。然而&#xff0c;面对众多的API&#xff0c;如何选择适合自己的API成为了一个挑战。本文将为你提供一份实用指南&#xff0c;帮助你选择适合自…