点击蓝色“程序猿DD”关注我

回复“资源”获取独家整理的学习资料!

故障模拟

本文是来讲解一下如何模拟将CPU、IO打满的。将CPU打满,原理很简单,跑一个CPU密集型的程序即可;将IO打满,原理也很简单,狂写不止即可。下面我们先来看一个打满CPU的脚本:

#!/bin/bashcat << EOF > /tmp/infiniteburn.sh#!/bin/bashwhile true;    do openssl speed;doneEOFfor i in {1..32}do    nohup /bin/bash /tmp/infiniteburn.sh &done

这个脚本是什么意思呢?这里简单讲解一下。首先是先建一个/tmp/infiniteburn.sh脚本,这个脚本中的内容即为:

#!/bin/bashwhile true;    do openssl speed;done

这个脚本就是用来打满CPU的。这里的openssl speed是用来测试加密算法性能的,这是一种CPU密集型的计算。运行一个脚本只会打满一个CPU,所以这里还有下面的

for i in {1..32} 

这个操作,用来执行32次/tmp/infiniteburn.sh脚本。这里假设的前提是当前机器的内核个数不会超过32,如果超过了,那么修改一下32这个数值即可。

再来看下如何打满IO,对应的模拟脚本如下:

#!/bin/bash# Script for BurnIO Chaos Monkeycat << EOF > /tmp/loopburnio.sh#!/bin/bashwhile true;do    dd if=/dev/urandom of=/burn bs=1M count=1024 iflag=fullblockdoneEOFnohup /bin/bash /tmp/loopburnio.sh &

这个脚本和上面的第一个脚本相同,首先是先建一个/tmp/loopburnio.sh的过度脚本,这个脚本中的内容是:

while true;do    dd if=/dev/urandom of=/burn bs=1M count=1024 iflag=fullblockdone

这里用到了linux的dd命令,它用于读取、转换并输出数据。dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

dd if=/dev/urandom of=/burn bs=1M count=1024 iflag=fullblock 

这条命令的意思是采用dd工具模拟读写。if指定输入的文件名,of指定输出的文件名,bs同时设置读写块的大小为1M,count是指仅拷贝1024个块,块大小等于bs指定的字节数。iflag=fullblock表示堆积满block。

运行这个脚本,然后使用iostat命令查看IO的使用情况:

原理我都懂,要它有啥用?

上面的两个脚本是Simian Army中的故障注入的实现,Simian Army或许小伙伴们没有听过,那么Chaos Monkey肯定得听过了吧。Chaos Monkey是Netflix的产品,如果你还不知道Netflix是什么,那么赶紧看一下《明显公司之Netflix》这篇来恶补一下吧。Chaos Monkey 通过关停一个或多个虚拟机来模拟 service 实例的失效。Chaos Monkey 的名字来源于其工作的方式:如同一只野生的、武装了的猴子,在数据中心释放后,造成的严重破坏。

有了类似的故障注入的产品,工程师可以快速了解他们正在构建的服务是否健壮,有足够的弹性,可以容忍计划外的故障。

混沌工程实验像 Chaos Monkey 只是杀杀机器而已?这是错误的理解。回溯混沌工程发展的时间线,业界对混沌工程的理解是逐步深入的。Netflix 开发的 Chaos Monkey 成为了混沌工程的开端,但混沌工程不仅仅是 Chaos Monkey 这样一个随机终止 EC2 实例的实验工具。随后混沌工程师们发现,终止 EC2 实例只是其中一种实验场景。因此, Netflix 提出了 Simian Army 猴子军团工具集,除了 Chaos Monkey 外还包括:

  • Chaos Gorilla:Chaos Monkey的升级版,模拟整个Amazon Availability Zone的故障,以此验证在不影响用户,且无需人工干预的情况下,能够自动进行可用区的重新平衡。

  • Chaos Kong:Chaos Gorilla的升级版,模拟整个region(一个region由多个Amazon Availability Zone组成)的故障。

  • Latency Monkey:在RESTful服务的调用中引入人为的延时来模拟服务降级,测量上游服务是否会做出恰当响应。通过引入长时间延时,还可以模拟节点甚至整个服务不可用。

  • Conformity Monkey:查找不符合最佳实践的实例,并将其关闭。例如,如果某个实例不在自动伸缩组里,那么就该将其关闭,让服务所有者能重新让其正常启动。

  • Doctor Monkey:查找不健康实例的工具,除了运行在每个实例上的健康检查,还会监控外部健康信号,一旦发现不健康实例就会将其移出服务组。(隔离出服务,并且给相关人员足够的纠错时间,最终再关闭。)

  • Janitor Monkey:查找不再需要的资源,将其回收,这能在一定程度上降低云资源的浪费。

  • Security Monkey:这是Conformity Monkey的一个扩展,检查系统的安全漏洞,同时也会保证SSL和DRM证书仍然有效。

  • 10-18 Monkey:进行本地化及国际化的配置检查,确保不同地区、使用不同语言和字符集的用户能正常使用Netflix。

图中正中央拿双枪的猴子就是Chaos Monkey,那么其它的猴子分别代表什么呢?

混沌工程

我们是否有过这样的经历:大半夜被电话叫醒,开始紧张地查验问题,处理故障以及恢复服务?也许就是因为睡前的一个很小的变更,因某种未预料到的场景,引起蝴蝶效应,导致大面积的系统混乱、故障和服务中断,对客户的业务造成影响。特别是近几年,尽管有充分的监控告警和故障处理流程,这样的新闻在 IT 行业仍时有耳闻。问题的症结便在于,对投入生产的复杂系统有多少信心。监控告警和故障处理都是事后的响应与被动的应对,那有没有可能提前发现这些复杂系统的缺陷呢?

混沌工程在分布式系统上进行由经验指导的受控实验,观察系统行为并发现系统缺陷,以建立对系统在规模增大时因意外条件引发混乱的能力和信心。

Principles of Chaos: Chaos Engineering is the discipline of experimenting on a distributed system in order to build confidence in the system's capability to withstand turbulent conditions in production.

本文先从模拟CPU和IO打满的故障开始,随后引入了混沌工程的概念,不过这仅仅是个开始,在后面的文章中还会介绍如何模拟网络延时、网络丢包、网络故障、进程假死等故障,以此为媒介慢慢的为大家介绍一下混沌工程的东西。不,过有一点先要确立故障模拟只是混沌工程中的一个环节,并不是全部,而且混沌工程中的故障模拟不止包括节点级的故障,还包括集群级的故障、机房/数据中心级别的故障以及区域级别的故障等等。

留言交流不过瘾?添加微信:zyc_enjoy

根据指引加入各种主题讨论群

每日一问

今日问题

一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?

(留言说说你的答案吧,明日推文公布答案)

昨日答案

点燃身前的草,由于风的作用,火会继续往前蔓延,烧过的地方就留下了不可燃的隔离区,人只需要待在这个被烧过的地方就不会被身后的大火烧到。

(昨日问题可在昨日推文的文末查看)

推荐阅读

  • Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化!

  • 用命令行在控制台里玩斗地主,试过没?

  • Spring Boot 面试的十个问题

  • Spring WebClient vs. RestTemplate

  • Apache Maven 最全教程,7000 字总结!

签到计划

活动介绍:自律到极致-人生才精致:第11期

活动奖励:《中台战略:中台建设与数字商业》

扫描下方二维码,查看本书详情

扫描下放二维码,签到参与

来星球聊聊技术人的斜杠生活

点一点“阅读原文”小惊喜在等你

如何模拟将CPU、IO打满?相关推荐

  1. 模拟IIC——关于模拟IIC的IO口的配置选取推挽输出还是开漏输出,以及是否需要更改IO口输入输出模式和是否需要对IO配置上拉

    在使用模拟IIC的时候,观看别人的程序的时候发现了程序之间的一些不一样的地方 ----------------------------------代码1------------------------ ...

  2. 【Linux进程、线程、任务调度】三 CPU/IO消耗型进程 吞吐率/响应 SCHED_FIFO算法与SCHED_RR算法 SCHED_NORMAL算法和CFS算法 nice与renic chrt

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2(已满): 780902027 学习 ...

  3. 模拟消耗CPU之shell脚本

    模拟消耗CPU之shell脚本 #!/bin/sh filename killcpu.sh if [ $# != 1 ] ; then echo "USAGE: $0 " exit ...

  4. OSSEC解决IO占满问题

    ossec的rootcheck模块出现IO占满引起存储延时,严重影响业务,之前尝试过对IO进行限速.但是指标不治本,看了很多issue之后,发现没有好的解决方案,rootcheck模块,只能设置频率的 ...

  5. php速度慢不怕cpu漏洞,PHP曝远程DOS漏洞可致CPU持续占满,请注意升级_护卫神

    PHP是一个开放的平台,集成了广大PHP爱好者的智慧精华,为社会产生了极大的效益,使用十分广泛. 但是PHP曝出的漏洞也不小,前不久一次hash漏洞导致PHP服务器CPU占满,最近一次的远程DOS漏洞 ...

  6. linux内核 cpu io等待,linux系统调优之IO、cpu

    首先先要再次强调一个概念:系统调优的目的不是怎样去吧那一部分做的特别优化.而是整体的全局的考虑.性能优化是为了找到系统的瓶颈并且想办法提高瓶颈最好能够去除.(个人认为万事皆有利弊,在计算机的世界里同样 ...

  7. java cpu io高_服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)...

    关于top命令 经常问load average 参考:load average 定义(网易面试) 问题现象: 1,top命令查询服务器负载达到2.0-5之间,tomcat的cpu使用率达到104% l ...

  8. Linux 不同方法查看进程消耗CPU IO 等

    1.用top命令指定固定的PID top -p 10997 查询指定进程的PID ps -ef | grep zookeeper jim 10997 1959 0 12月14 pts/2 00:00: ...

  9. linux检查哪些进程消耗io,Linux 不同方法查看进程消耗CPU IO 等

    1.用top命令指定固定的PID top -p 10997 查询指定进程的PID ps -ef | grep zookeeper jim 10997 1959 0 12月14 pts/2 00:00: ...

最新文章

  1. ETL MySQL in Oracle ODI 12c
  2. Session 时间
  3. 一个伪黑客的成功的秘密1:tomcat入侵
  4. 使用Flink时遇到的问题(不断更新中)
  5. Asp.Net基础 - 4.ASP.Net揭秘之Input版自增 + 5.ViewState初探
  6. easyui 传递参数报错(错误:uncaught SyntaxError: Unexpected identifier)
  7. 【计算机算法设计与分析】——栈和队列
  8. 奥斯卡“最佳国际电影”奖,《哪吒之魔童降世》申请出战!
  9. 强口令检测(使用正则表达式)
  10. easyui datagrid 实现单选并能取消单选
  11. 工作室招新管理系统需求分析
  12. Java网络爬虫全面教程
  13. EasyCamera海康摄像机向EasyDarwin云平台推送音视频数据的缓存设计
  14. 电脑主机组装总结——自己动手,丰衣足食
  15. Ramda.js 函数式编程 (==在angular中引入)
  16. Java8 日期时间类
  17. MySQL的EXPLAIN解释器
  18. 达梦数据库ZYJ实例安装初始化
  19. 游戏出海越南,版号不容忽视
  20. 现在很多人都想做抖音短视频,那我们应该怎样去做呢?一起来看一吧

热门文章

  1. libuv 高性能事件驱动库 简介
  2. 区块链 软分叉和硬分叉 简介
  3. hbase redis mongoddb neo4j 非关系型数据库简介
  4. linux 内核 数据结构 file_operations、file、inode
  5. suricata的简介以及安装过程
  6. Linux2.6内核--内存管理(1)--分页机制
  7. java常用集合类详解(有例子,集合类糊涂的来看!)
  8. 关系型数据库是如何运作的
  9. openoffice linux 目录,Linux之安装OpenOffice
  10. oracle10g重新配置crs,Oracle 10G RAC一节点系统重做后修复