国内最专业的IT技术学习网

办公软件

当前位置:主页 > 办公软件 >

这次我们看看阿里的人是如何蹂躏CPU的

发布时间:2019/08/16标签:   CPU      故障    点击量:

原标题:这次我们看看阿里的人是如何蹂躏CPU的

?

前言

在前面的系列文章中皮皮就介绍过如何使得CPU、I/O满载,如何实现网络延迟、丢包和中断,如何模拟线程、进程以及机器假死。

本文介绍是阿里巴巴混沌工程工具ChaosBlade中的CPU满载的故障模拟的实现方式。之前看的是Netflix的Simain Army中的实现,看上去一目了然,通过java的形式调用一下模拟脚本,脚本的内容如下;

#!/bin/bash?

?

cat?<?/tmp/infiniteburn.sh?

#!/bin/bash?

while?true;?

????do?openssl?speed;?

done?

EOF?

?

for?i?in?{1..32}?

do?

????nohup?/bin/bash?/tmp/infiniteburn.sh?&?

done?

通过调用openssl speed来模拟CPU满负荷运作,这里的方式还比较粗暴,直接开了32个线程来执行openssl speed这种CPU密集型计算程序。如果CPU的内核数大于32,那么就需要修改这里的硬编码脚本了。

通过翻看阿里巴巴混沌工程工具ChaosBlade的代码(golang project),发现它对于CPU的蹂躏方式要细腻很多。比如CPU的内核个数使用runtime.NumCPU()来获取。当然了还会有一些其它的附加细节,这个下面会详述。

我们先来简单的了解一下ChaosBlade对于这一块的实现布局。在ChaosBlade中,我们实现故障(类似cpu 100%、I/O 100%、网络中断等)注入的入口是通过blade命令。例如:使得CPU满载负荷,那么可以使用./blade create cpu fullload来实现。

其实ChaosBlade中的blade命令只是采用Cobra封装的CLI入口,其内部实现是调用bin/目录下的chaos_burncpu程序。

ChaosBlades(releases版)的下载地址为:https://github.com/chaosblade-io/chaosblade/releases。解压之后的目录结构为:

hidden@hidden:~/chaos/chaosblade-0.2.0$?tree?

.?

├──?bin?

│???├──?chaos_burncpu?

│???├──?chaos_burnio?

│???├──?chaos_changedns?

│???├──?chaos_delaynetwork?

│???├──?chaos_dropnetwork?

│???├──?chaos_filldisk?

│???├──?chaos_killprocess?

│???├──?chaos_lossnetwork?

│???├──?chaos_stopprocess?

│???├──?cplus-chaosblade.spec.yaml?

│???├──?jvm.spec.yaml?

│???└──?tools.jar?

├──?blade?

├──?chaosblade.dat?

└──?lib?--?

可以看到bin/目录下处理chaos_burncpu之外还有很多chaos_***形式的程序,比如chaos_burnio是让I/O满载负荷。这些chaos_***形式的程序的使用方式都是大同小异的。

使用指南

我们这里不使用ChaosBlade提供的blade命令,因为这只是外部的一层封装,使用这个无法使我们能够透彻的理解内部的实现。我们这里使用bin/chaos_burncpu来演示一下具体的用法。调用方式如下:

bin/chaos_burncpu?--start?

这里命令可以让当前机器的CPU满载负荷。取消CPU满载负荷可以使用如下的命令:

bin/chaos_burncpu?--stop?

bin/chaos_burncpu命令还可以通过--cpu-count来指定CPU中需要满载负荷的内核个数,示例如下:

#?指定需要满载负荷的CPU的内核个数为4?

bin/chaos_burncpu?--start?--cpu-count?4?

假设现在测试所使用的机器的cpu共有4个内核,那么我们让其中3个内核满载,效果如何呢?首先运行sar -u 1 100命令来监测cpu的使用情况,然后运行:

bin/chaos_burncpu?--start?--cpu-count?3?

可以在持续运行sar命令的shell终端中看到CPU的%idle数值变成了25%左右:

版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号