【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(六)-servelt

本文主要是介绍【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(六)-servelt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

7. servelt接口规范

7.0 创建servelt

        blade create servlet

7.0.1 介绍

Servlet 是 Java 的 web 的接口规范,Java web 服务器都遵循此规范实现。本场景主要模拟 Java Web 请求延迟、异常场景。

  1. [blade create servlet delay](blade create servlet delay.md) 请求延迟
  2. [blade create servlet throwCustomException](blade create servlet throwCustomException.md) 请求异常

7.0.2 参数

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: 已废弃

7.0.3 常见问题

Q: 下发规则不生效

A: 在命令后添加 --debug,然后触发业务请求,查看应用进程用户目录下 logs/chaosblade/chaosblade.log 日志,如下:

2019-12-09 21:15:12 DEBUG servlet matchers: {"matchers":{"querystring":"name=bobo","servletpath":"/servlet/path","method":"GET","requestpath":"/servlet/path"}}
2019-12-09 21:15:12 INFO  Match rule: {"action":{"name":"delay"},"actionName":"delay","matcher":{"matchers":{}},"target":"servlet"}

servlet matchers 日志表示获取应用的匹配数据,Match rule 表示和下发的命令匹配

7.1 Java web 请求延迟

        blade create servlet delay

7.1.1 参数

以下是此场景特有参数,通用参数详见:[blade create servlet](blade create servlet.md)
–time string: 延迟时间,单位是毫秒,必填项
–offset string: 延迟上下浮动时间,例如 --time 3000 --offset 1000,延迟时间的取值范围是 2000-4000 毫秒

7.1.2 案例

访问 http://localhost:8080/dubbodemo/servlet/path?name=bob 请求延迟 3 秒,影响 2 条请求

blade c servlet delay --time 3000 --requestpath /servlet/path --effect-count 2{"code":200,"success":true,"result":"154c866919172119"}

访问请求进行验证。
请求参数是 name=family,延迟 2 秒,延迟时间上下浮动 1 秒,影响范围是 50% 的请求,同时开启 debug 日志用于排查问题,命令如下:

blade c servlet delay --time 2000 --offset 1000 --querystring name=family --effect-percent 50 --debug{"code":200,"success":true,"result":"49236d2406d168f4"}

监控 应用进程用户目录/logs/chaosblade/chaosblade.log 日志
在这里插入图片描述
可以看到下发了 create 指令并开启 debug 日志。 请求两次 http://localhost:8080/dubbodemo/servlet/path?name=bob ,由于参数 querystring 和下发的命令不匹配,所以没有生效 随后请求两次 http://localhost:8080/dubbodemo/servlet/path?name=family,第一次打印了 Match rule 日志,说明匹配成功,延迟生效;第二次打印了 limited by,说明匹配成功,但是由于 effect-percent 参数的限制,所以场景被限制,此请求没有发生延迟

7.2 Java web 请求异常

        blade create servlet throwCustomException

7.2.1 参数

以下是此场景特有参数,通用参数详见:[blade create servlet](blade create servlet.md)
–exception string: 异常类,带全包名,必须继承 java.lang.Exception 或 java.lang.Exception 本身
–exception-message string: 指定异常类信息,默认值是 chaosblade-mock-exception

7.2.2 案例

访问 http://localhost:8080/dubbodemo/hello?code=1 请求异常,影响 3 条请求

blade c servlet throwCustomException --exception org.springframework.beans.BeansException --exception-message mock-beans-exception --requestpath /hello --effect-count 3{"code":200,"success":true,"result":"d4a63f4f59f76f4a"}

访问请求进行验证。
在这里插入图片描述

查看日志,通过日志也可以看出
在这里插入图片描述

8. 其他

8.1 server

        blade server
后台启动 blade,会暴露出 web 服务,上层可通过 http 调用

8.1.1 介绍

在 server 模式下,blade 程序会对外暴露 web 服务,上层可通过 http 请求调用,请求格式是 chaosblade?cmd=具体命令,例如执行 CPU 满载,则请求是 chaosblade?cmd=create%20cpu%20fullload

8.1.2 命令

start: 启动 server 模式, 暴露 web 服务
stop: 停止 server 模式, 关闭 web 服务

8.1.3 start 命令参数

-p, --port string 服务端口号,默认是 9526

8.1.4 案例

# 启动 server 模式,服务端口是 8080
blade server start --port 8080
success, listening on 8080# 触发 CPU 负载 50% 场景
curl "http://xxx.xxx.xxx.xxx:8080/chaosblade?cmd=create%20cpu%20load%20--cpu-percent%2050"{"code":200,"success":true,"result":"e08a64a9af02c393"}# 销毁实验场景
curl "http://xxx.xxx.xxx.xxx:8080/chaosblade?cmd=destroy%20e08a64a9af02c393"# 停止 blade server
blade server stop{"code":200,"success":true,"result":"pid is 12619"}

8.1.5 常见问题

Q: {“code”:605,“success”:false,“error”:“the chaosblade has been started. If you want to stop it, you can execute blade server stop command”}
A: 服务已经启动

Q: {“code”:500,“success”:false,“error”:“time=“2019-09-25T11:36:28.321495762+08:00” level=error msg=“start blade server error, listen tcp :8080: bind: address already in use”\n”}
A: 端口已被占用

8.2 status

        blade status
查询混沌实验和混沌实验环境状态

8.2.1 介绍

查询混沌实验和混沌实验环境状态,可通过创建的混沌实验的 uid 或命令类型来查询混沌实验。 status 可以简写为 s,即 blade status 可以简写为 blade s

8.2.2 参数

–asc bool: 默认值为 false,按 CreateTime 进行降序排序
–limit string: 查询实验数目限制,支持 OFFSET 子句,例如:limit 4,3 就表示从位置5开始,返回后3项
–status string: 实验状态,create 类型支持 Created|Success|Error|Destroyed 状态,prepare 类型支持 Created|Running|Error|Revoked 状态
–target string: 实验目标,例如:dubbo
–type string: 命令类型,attach|create|destroy|detach
–uid string: prepare 或 experiment 的 uid
-h, --help: 查看 create 命令帮助
可使用的父命令参数
-d, --debug: 设置 DEBUG 执行模式

8.2.3 案例

# 查看 status 命令帮助文档
blade status -h# 查询 uid 为 4c6b4a3fc313e1d4 的实验信息
blade status 4c6b4a3fc313e1d4
{"code": 200,"success": true,"result": {"Uid": "4c6b4a3fc313e1d4","Command": "cpu","SubCommand": "fullload","Flag": " --cpu-percent=60","Status": "Destroyed","Error": "","CreateTime": "2020-01-14T14:09:49.152708+08:00","UpdateTime": "2020-01-14T14:10:45.605888+08:00"}
}# 查询 create 类型命令的实验信息
blade status --type create
{"code": 200,"success": true,"result": [{"Uid": "4c6b4a3fc313e1d4","Command": "cpu","SubCommand": "fullload","Flag": " --cpu-percent=60","Status": "Destroyed","Error": "","CreateTime": "2020-01-14T14:09:49.152708+08:00","UpdateTime": "2020-01-14T14:10:45.605888+08:00"}]
}# 查询 prepare 类型命令的实验信息
blade status --type prepare
{"code": 200,"success": true,"result": [{"Uid": "e669d57f079a00cc","ProgramType": "jvm","Process": "dubbo.consumer","Port": "59688","Status": "Running","Error": "","CreateTime": "2019-03-29T16:19:37.284579975+08:00","UpdateTime": "2019-03-29T17:05:14.183382945+08:00"}]
}

8.2.4 常见问题

Q: {“code”:406,“success”:false,“error”:“data not found”}
A: 查询的实验不存在,可能是数据文件 chaosblade.dat 丢失,这时如果需要停止实验,需要手工停止 blade 进程

8.3 打印 blade 工具版本信息

        blade version

8.3.1 介绍

打印 blade 工具版本信息。 version 可以简写为 v,即 blade version 可以简写为 blade v。

8.3.2 参数

-h, --help: 查看 create 命令帮助
可使用的父命令参数
-d, --debug: 设置 DEBUG 执行模式

8.3.3 案例

# 查看 blade 工具版本信息
blade version
version: 0.4.0  # 版本
env: Darwin Kernel Version 19.0.0: Wed Sep 25 20:18:50 PDT 2019; root:xnu-6153.11.26~2/RELEASE_X86_64 x86_64    # 环境信息
build-time: Thu Dec  5 14:29:44 CST 2019    # 构建时间

这篇关于【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(六)-servelt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932126

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动