• 混沌测试--资源耗尽类故障注入


    资源耗尽类故障主要参考如下:

     磁盘满

    方法1:

    找到对应的分区,dd一个大文件

    dd if=/dev/zero of=/home/cli/diskfull.drill  bs=1G count=10 #写10G

    方法2:

    阿里chaosblade(推荐)

    ./blade create disk fill --size 20480 --path=/home/cli

    方法3:

    vmware脚本

    https://github.com/vmware/mangle/blob/master/mangle-default-plugin/src/main/resources/InjectionScripts/diskspace.sh

    磁盘IO高

    方法1:

    通过dd不停的写磁盘

    dd if=/dev/zero of=/data/diskfull.drill bs=1M count=10240 oflag=dsync

    方法2:

    阿里chaosblade

    ./blade create disk burn --write --read   --timeout 300

    方法3:

    vmware脚本

    https://github.com/vmware/mangle/blob/master/mangle-default-plugin/src/main/resources/InjectionScripts/ioburn.sh

    内存使用率高

    方法1:

    自己写个应用不停的分配内存

    ```bash
    #!/bin/sh
    value=$(seq -w -s '' 0 100000000)
    sleep 1200
    ```
    以上脚本大概分配1G(100000000*9/1024/1024)左右的内存,注意seq大小的控制,如果太大会导致进程崩溃,适当调整seq的大小;如果内存压力不够,多起几个进程。
    
    ```bash
    # -bash:xrealloc:无法分配18446744071562067968字节(已分配1945600字节)
    # bash 4.4修复了这个问题(未验证)

    方法2:

    使用stress命令

    ```bash
    yum install stress -y
    
    stress --vm 1 --vm-bytes 3.9G --vm-keep --timeout 120s
    
    --vm 启动几个worker来进行压测
    --vm-bytes 每个work分配的内存大小,不能超过物理内存总量,否则会运行失败
    --vm-keep 保持内存高状态,如果不使用这个参数,内存会在占用率上去之后又下去,循环往复。

    方法3:

    使用ramfs或tmpfs往内存里写入文件

    ```bash
    mkdir z
    #以下2选1,区别参见括号
    1. mount -t ramfs ramfs z/ #(z目录写空间写满后会可以继续写入)
    2. mount -t tmpfs -o size=2048M tmfs z/ #(z目录写满后,无法继续写入)
    
    dd if=/dev/zero of=z/file bs=1M count=128
    ```

    使用ramfs时要注意控制写入内存的大小,如果太大会触发系统OOM,从而导致系统不停的杀进程,比如ssh进程可能被杀导致远程连接失败。

    可以通过设置以下参数,如果系统OOM,就让系统kernel panic后重启。

    ```bash
    echo "vm.panic_on_oom=1" >> /etc/sysctl.conf
    echo "kernel.panic=10" >> /etc/sysctl.conf
    sysctl -p
    ```

    方法4:

    一行命令

    ```bash
    cat <(yes | tr \n x | head -c $((1024*1024*100))) <(sleep 120) | grep n #占用100M内存
    ```

    方法5:

    循环创建n个进程来占用内存空间(推荐)

    有现成的脚本可以参考,来自vmware:

    https://github.com/vmware/mangle/blob/master/mangle-default-plugin/src/main/resources/InjectionScripts/memoryspike.sh#L286
    
    ```bash
    ./memoryspike.sh --operation=inject --load=80 --timeout=120000 #时间单位是毫秒
    
    #help: --operation=<remediate | precheck | status > 
    # --operation=inject --load=<load> --timeout=<timeoutinMilliseconds>
    
    ```

    方法6:

    使用阿里的chaosblade(推荐)

    # 执行内存占用 50%
    blade c mem load --mode ram --mem-percent 50
    # 保留 200M 内存
    blade c mem load --mode ram --reserve 200 --rate 100

    网卡流量满

    方法1.

    使用netperf工具进行打流,可以使用多个客户端对同一个服务端进行打流,造成网卡满的效果

    下载安装:

    https://github.com/HewlettPackard/netperf

    服务端:

    ./netserver -p 20000 #服务端监听 20000端口

    客户端(如果服务端网卡多,使用多个客户端同时打)

    ./netperf -t UDP_STREAM -H 172.16.0.22 -p 20000 -l 60 -- -m 1400

    Netperf [global options] –-[test-specific options]

    其中:

    全局命令行参数包括如下选项:

    -H host :指定远端运行netserver的server IP地址。

    -l testlen:指定测试的时间长度(秒)

    -t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR

    测试相关的局部参数包括如下选项:

    -s size 设置本地系统的socket发送与接收缓冲大小

    -S size 设置远端系统的socket发送与接收缓冲大小

    -m size 设置本地系统发送测试分组的大小

    -M size 设置远端系统接收测试分组的大小

    -D 对本地与远端系统的socket设置TCP_NODELAY选项

    更多详细内容参见:

    https://hewlettpackard.github.io/netperf/doc/netperf.html

    方法2.使用iperf

    详细参见

    https://iperf.fr/iperf-doc.php#3doc

    cpu利用率高

    方法1:

    使用yes命令(推荐)

    yes>/dev/null

    这个命令只能使cpu的1个核跑满100%,多核的话就起多个命令。

    或使用vmware现成的脚本(推荐):

    https://github.com/vmware/mangle/blob/master/mangle-default-plugin/src/main/resources/InjectionScripts/cpuburn.sh

    方法2:

    循环跑一个系统调用

    #!/bin/bash
    
    while true
    do
    date>/dev/null
    done

    方法二和方法二的区别在于方法一是us比较高,方法二是sy比较高,因为方法2的date命令会进行疯狂的系统调用,从而导致sy占比较高。

    方法一和方法二对演练目的也没啥影响。

    方法3:

    循环跑ssl测试

    #!/bin/bash
    
    while true
    do
    /usr/bin/openssl speed>/dev/null 2>&1
    done

    方法4.

    使用stress工具

    yum install stress -y
    
    stress -c 4 -t 120

    stress简单用法:

    -c cpu核心数量

    -t 压测时长

    方法5:

    使用阿里的chaosblade(推荐)

    ./blade create cpu fullload
  • 相关阅读:
    C++三大特性之多态
    内向者沟通圣经:4P法(Preparation,Presence,Push,Practice)
    RTP/RTCP、TCP、UDP、RTMP、RTSP
    网络七层协议
    预防U盘被病毒侵害的方法
    Win8安装程序出现2502、2503错误解决方法
    小L的区间求和
    【剑指offer-12】矩阵中的路径
    【剑指offer】数值的整数次方
    【剑指offer】二进制中1的个数
  • 原文地址:https://www.cnblogs.com/mingfan/p/13284036.html
Copyright © 2020-2023  润新知