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

办公软件

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

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

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

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

 

前言

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

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

#!/bin/bash 

 

cat << EOF > /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 --<snip> 

可以看到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号