混沌工程之注入CPU耗尽(控制CPU使用率持续100%)

CPU使用率一般是希望越低越好,但混沌工程需要注入CPU耗尽的故障,我们今天研究下如何控制CPU使用率持续100%。

混沌工程中为什么注入CPU耗尽故障呢?系统中当然不期望CPU耗尽,但期望CPU耗尽后系统能否自动恢复,自动恢复的时长,不能自动恢复的话手工恢复后系统能否正常工作。

借用阿里混沌工程实践,CPU耗尽如下:系统层-系统异常-CPU耗尽。

混沌工程测试模板
脚本chaos-cpu.sh

#!/bin/bash 

endless_loop() 

        echo -ne "i=0;

        while true

        do

        i=i+100;

        i=100

        done" | /bin/bash & 

if [ $# != 1 ]; then 

echo "USAGE: $0

exit 1; 

fi


for i in `seq $1` 

do 

      endless_loop 

      pid_array[$i]=$!; 

done 

 

for i in "${pid_array[@]}"; do 

echo 'kill' $i ';'; 

done 

脚本解释

脚本的大致思路,根据待测系统的CPU数,创建相应个数的死循环进程,并获取相应进程的PID,便于恢复测试。传入参数的个数必须等于1,不等于1有提示输入相应的CPU数。

根据CPU数,创建相应的进程数,根据时间片,操作系统会调度该进程到某个CPU上,死循环的话会一致占用着该CPU

1) echo -ne "command" | /bin/bash &

echo -n处理 "command" 输出字符串不换行,-e 处理 "command" 中某些特殊字符

2) $#:传入脚本的参数个数

3) seq $1,$1:  传入脚本的第一个参数,seq默认生成以1开头的以1为增幅的生成数字列表。

4) $!:Shell后台运行进程的PID,$$:Shell本身的PID

5) pid_array[$i] :shell中数组赋值时写法。

${pid_array[@]} :输出所有数组的值,2种表示形式${arr[@]} 或${arr[*]} 。

arr=(1 2 3 4 5)数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开

arr=('a' 'b' 'c')字符串类型数组:数组中的元素使用双引号或者单引号包含,其它同数值类型数组

数组的任何元素可以用${arr[下标]}来引用,花括号是必须的,以避免和路径扩展冲突。

用法

1) 查看cpu内核数量 > lscpu,比如是4个核

2) ./chaos-cpu.sh 4 意味着将4个核全部占满,将CPU全部耗尽。

3) top可以看到整个系统的CPU满负荷。

4) 恢复环境:将第2步输出的进程kill -9 pid

参考

消耗CPU和内存的脚本

https://blog.csdn.net/cangencong/article/details/74328944?utm_medium=distribute.wap_relevant.none-task-blog-baidujs_title-10

你可能感兴趣的:(混沌工程之注入CPU耗尽(控制CPU使用率持续100%))