chaosblade-jvm-exec 是负责 chaosblade 中 Jvm 故障注入的模块,是基于 jvm-sandbox 的 java agent。本篇文章介绍下他俩的目录关系,以及交互逻辑。

1 目录关系

chaosblade-jvm-exec 最终是打包成为一个jar包,放在sandbox的目录下面,sandbox又在chaosblade的目录下。

├── bin
│   ├── chaos_addfile
│   ├── chaos_appendfile
│   ├── chaos_burncpu
│   ├── chaos_burnio
│   ├── chaos_burnmem
│   ├── chaos_changedns
│   ├── chaos_chmodfile
│   ├── chaos_deletefile
│   ├── chaos_dropnetwork
│   ├── chaos_filldisk
│   ├── chaos_killprocess
│   ├── chaos_movefile
│   ├── chaos_occupynetwork
│   ├── chaos_os
│   ├── chaos_stopprocess
│   ├── chaos_stracedelay
│   ├── chaos_straceerror
│   ├── chaos_tcnetwork
│   └── strace
├── blade
├── chaosblade.dat
├── lib
│   └── sandbox
│       ├── bin
│       │   └── sandbox.sh
│       ├── cfg
│       │   ├── sandbox-logback.xml
│       │   ├── sandbox.properties
│       │   └── version
│       ├── example
│       │   └── sandbox-debug-module.jar
│       ├── install-local.sh
│       ├── lib
│       │   ├── sandbox-agent.jar
│       │   ├── sandbox-core.jar
│       │   └── sandbox-spy.jar
│       ├── module
│       │   ├── chaosblade-java-agent-1.2.0.jar
│       │   └── sandbox-mgr-module.jar
│       ├── provider
│       │   └── sandbox-mgr-provider.jar
│       ├── sandbox-module
│       └── tools.jar
├── logs
│   └── chaosblade.log
└── yaml├── chaosblade-jvm-spec-1.2.0.yaml└── chaosblade-os-spec-1.2.0.yaml

整个是chaosblade的目录, sandboxlib/sandbox 下面, chaosblade-java-agent-1.2.0.jar(chaosblade-jvm-exec)lib/sandbox/module下面,如果是为了快速的测试,直接替换 chaosblade-java-agent-1.2.0.jar 整个就可以测试了。

2 交互接口

chaosblade-jvm-exec 是sandbox的一个模块,也可以理解为sandbox 和 chaosblade的交互

2.1 prepare

blade功能 attach java进程

#prepare
sudo -u tomcat -H /tmp/chaosblade/blade  prepare jvm -j /home/q/java/default  --pid 4087 -P 8703 --debug

2.1.1 执行shell

# shell
/home/q/java/default/bin/java -Xms128M -Xmx128M -Xnoclassgc -ea -Xbootclasspath/a:/home/q/java/default/lib/tools.jar -jar /tmp/chaosblade/lib/sandbox/lib/sandbox-core.jar 4087 "/tmp/chaosblade/lib/sandbox/lib/sandbox-agent.jar" "home=/tmp/chaosblade/lib/sandbox;token=320732876429;server.ip=127.0.0.1;server.port=8703;namespace=chaosblade"

执行完了之后
sandbox会追加文件 ~/.sandbox.token 一行 chaosblade;111828312229;localhost;8703 包括namespace,token,ip和端口信息
生成日志文件 ~/logs/chaosblade/chaosblade.log~/logs/sandbox/sandbox.log

2.1.2 激活模块

# http
http://127.0.0.1:8703/sandbox/chaosblade/module/http/sandbox-module-mgr/active?1=1&ids=chaosblade

2.1.3 检查

http://127.0.0.1:8703/sandbox/chaosblade/module/http/chaosblade/status?1=1

2.2 revoke

卸载java agent

# revoke
/tmp/chaosblade/blade revoke  3cd60165a642daba

2.2.1 通过接口

# http
http://127.0.0.1:8703/sandbox/chaosblade/module/http/sandbox-control/shutdown?1=1

2.3 故障注入和销毁

2.3.1 注入故障

blade 操作

# create
curl "http://127.0.0.1:9526/chaosblade?cmd=create%20http%20throwCustomException%20--timeout=86400%20--exception=java.lang.Exception%20--uri=http://*/gongdan/order/search1%20--effect-percent=100%20--debug"

sandbox交互

POST /sandbox/chaosblade/module/http/chaosblade/create{"action": "throwCustomException","debug": "true","effect-percent": "100","exception": "java.lang.Exception","suid": "2980d9f16d631a8c","target": "http","uri": "http://*/gongdan/order/search1"
}

2.3.2 故障恢复

blade 操作

#destroy
/tmp/chaosblade/blade destroy 65c1c346aa05799a

sandbox 交互

GET /sandbox/chaosblade/module/http/chaosblade/destroy?suid=65c1c346aa05799a

遇到过的问题

prepare 操作没有指定端口的情况下,对同一个jvm 进程进行prepare的逻辑选择端口的逻辑?


blade 内部会有一次重试的逻辑。

了解了大概的逻辑,对于排查问题有一定帮助。

[Chaosblade] chaosblade-jvm-exec和chaosblade交互相关推荐

  1. 干货 | 阿里巴巴混沌测试工具ChaosBlade两万字解读

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 一.前言 ChaosBlade 是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练 ...

  2. 详解ChaosBlade

    详解ChaosBlade 详解ChaosBlade ChaosBlade: 一个简单易用且功能强大的混沌实验实施工具 项目介绍 实验场景 主要项目 使用文档 快速体验 新手指南 下载chaosblad ...

  3. 故障演练--使用 ChaosBlade 进行混沌实验

    目录 一.ChaosBlade 简介 二.部分 JVM 实验介绍 1.权限 2.JVM 实验准备 3.注入方法延时 4.修改方法返回值 5.抛出自定义异常 6.使用自定义脚本替换指定类方法的内容 7. ...

  4. 阿里开源混沌工程工具 ChaosBlade

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   近日,阿里开源了混沌工程工具 ChaosBlade.该项目是遵循混沌工程(Chaos Engineering)原理 ...

  5. ChaosBlade x SkyWalking 微服务高可用实践

    来源|阿里巴巴云原生公众号 前言 在分布式系统架构下,服务组件繁多且服务间的依赖错综复杂,很难评估单个故障对整个系统的影响,而且请求链路长,如果监控告警.日志记录等基础服务不完善会造成故障响应.故障定 ...

  6. ChaosBlade:混沌工程简介(一)

    简介 随着微服务的盛行以及容器技术的普及,借助 Kubernetes 的容器编排能力,部署一套分布式系统的难度也越来越低.但随之而来的是越来越复杂的系统,以及越来越难的系统可靠性测试,有时仅仅是一个接 ...

  7. 未来技术展望(一):混沌工程与ChaosBlade

    -     起源     - 混沌工程是在分布式系统上进行实验的学科, 目的是建立对系统抵御生产环境中失控条件的能力以及信心.由Netflix在2010年底提出,2012开源Chaos Monkey( ...

  8. JVM CPU Profiler技术原理及源码深度解析

    本文介绍了JVM平台上CPU Profiler的实现原理,希望能帮助读者在使用类似工具的同时也能清楚其内部的技术实现. 引言 研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能 ...

  9. jvm线程分析命令_JVM:如何分析线程转储

    jvm线程分析命令 本文将教您如何分析JVM线程转储,并查明问题的根本原因. 以我的观点,线程转储分析是掌握Java EE生产支持的任何个人最重要的技能. 您可以从线程转储快照中获取的信息量通常远远超 ...

最新文章

  1. 设计模式之C#实现---Builder
  2. Java虚拟机:JVM 主要组成部分与内存区域
  3. 我的特长是复制、粘帖
  4. 1.App瘦身经验总结
  5. 【51单片机快速入门指南】5.3:SPI控制晶联讯JLX12864G_08602 LCD屏幕
  6. perl连接oracle的方法,Perl 连接Oracle 数据库
  7. Debian11镜像更新为阿里巴巴开源镜像站镜像,切换root用户,解决用户名不在sudoers文件中此事将被报告,Debian11 文件夹对话框、火狐浏览器、命令终端等没有最大化和最小化
  8. Java 源码--Arrays
  9. numpy 几个比较重要的链接
  10. python入门经典代码-【python】编程语言入门经典100例--12
  11. Motion 5.6.1 for Mac(视频后期特效处理软件)
  12. 程序化导入导出EXCEL数据,完全由模板输出
  13. 十二、Oracle学习笔记:分页查询
  14. 群晖nas存储系统原理_群晖NAS 创建存储池和存储空间图文教程
  15. Email - 搭建自定义邮件服务器
  16. ArcPy常用基础功能
  17. 常用计算机英文缩写,常用计算机英文缩写含义
  18. 国庆节未休假的你,领到了三倍的工资吗?
  19. 矢量网络分析仪测试软件,ZND 矢量网络分析仪
  20. 大盘点!关于无线AP的实用技术,看这篇就够了

热门文章

  1. 各项的语言资源,从入门到精通
  2. Python爬取了猫眼47858万条评论,告诉你《飞驰人生》值不值得看?!
  3. 软通python机试_软通机试练习题
  4. java 字节 字符
  5. ui设计参考网站以及ui设计参考书籍
  6. 去掉搜索引擎中的Powered By Dvbbs.net (动网论坛)
  7. lisp 天正标高_天正lisp文件夹_晓东CAD家园-论坛-A/VLISP-[求助]:怎样设置这个lisp里的读取文件...
  8. mysql c dll_libmysql_c.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  9. Vue.js 父子组件通信的十种方式;告诉世界前端也能做 AI;你可能不知道的14个JavaScript调试技巧...
  10. php用户登入与注销(cookie)