模拟占用磁盘内存CPU

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 模拟占用磁盘内存CPU

模拟使用内存(实际占用)

yum -y install gcc automake autoconf libtool make

# 下载 memtester
[root@jast01 ~]# wget http://pyropus.ca/software/memtester/old-versions/memtester-4.2.2.tar.gz

# 解压安装
[root@jast01 ~]# tar -zxvf memtester-4.2.2.tar.gz 
[root@jast01 ~]# cd memtester-4.2.2/
[root@jast01 memtester-4.2.2]# make && make install 

# 查看命令所在目录
[root@jast01 memtester-4.2.2]# whereis memtester
memtester: /usr/local/bin/memtester

# 将启动文件名修改为我们模拟的程序名
[root@jast01 memtester-4.2.2]# mv /usr/local/bin/memtester /usr/local/bin/gz-server

# 将我们现在完的安装包和目录可以删除了
[root@jast01 ~]# rm memtester-4.2.2* -rf

# 后台启动并查看内存使用
[root@jast01 ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:              3           0           2           0           0           3
Swap:             0           0           0
[root@jast01 ~]# nohup gz-server 2G > 1.log &
[root@jast01 ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:              3           2           0           0           0           1
Swap:             0           0           0

模拟占用内存(缓存占用)

#使用虚拟内存构造内存消耗

mkdir /tmp/memory

mount -t tmpfs -o size=1024M tmpfs /tmp/memory

dd if=/dev/zero of=/tmp/memory/block

#释放消耗的虚拟内存

rm /tmp/memory/block

umount /tmp/memory

rmdir /tmp/memory

模拟生成文件占用磁盘

命令

# 生成一个100G文件,文件目录、名为/opt/temp/data.zip
fallocate -l 100G /opt/temp/data.zip

通用脚本

#!/bin/bash
# 单位byte
dist_size=$((1024*1024*1024))
current_dist_size=0
# 每个文件的大小范围
file_min_size=$((1024*1024*500))
file_max_size=$((1024*1024*800))
# 文件名后缀
file_type=snappy.data
# 随机数
function rand(){
  min=$1
  max=$(($2-$min+1))
  num=$(date +%s%N)
  echo $(($num%$max+$min))
}


while [ 0 -le 1 ]
do
  rnd=$(rand $file_min_size $file_max_size)
  filename=md5sum
  current=`date "+%Y%m%d%H%M%S"`$(rand 1 10000000)
  key=`echo -n $current$hash_key|md5sum|cut -d" " -f1`
  echo '生成文件大小:'$(($rnd/1024/1024))'M'
  fallocate -l $rnd ./$key.$file_type
  current_dist_size=$(($current_dist_size+$rnd))
  echo '已生成文件大小:'$(($current_dist_size/1024/1024))'M,最大限制:'$(($dist_size/1024/1024))'M'
  if [ $current_dist_size -ge $dist_size ]; then
    echo '文件生成完成,退出生成'
    break
  fi
done

模拟使用CPU

sh cpu_run.sh adjust 80 1 5
模拟使用cpu80%,自动调整cpu使用率,波动范围5%

cur_cpu=mpstat 1 5|awk '{if(NR==8){print $3}}'
print $3 这个位置,有的版本是 print $4

mpstat 安装方法 yum install -y sysstat
具体使用说明见脚本内容

#!/bin/bash
#定义生成的c文件名称和可执行程序名称
fileName="cpu_use"
#定义使用方法说明
usage(){
  echo "./`basename $0` <start|stop|adjust> <cpu_Rate> [sleeptime/worktime] [adjustRange]"
  echo ""
  echo "start:按照核的数量启动 $fileName"
  echo "stop:停止所有 $fileName"
  echo "adjust:自动调整占用cpu的使用率"
  echo "cpu_Rate:占用cpu比率"
  echo "sleeptime/worktime:cpu空闲和工作时间的占比 可以通过该参数调整"
  echo "adjustRange:允许cpu的波动范围 即curentcpu-adjustRange cpu_Rate curentcpu+adjustRange就不再调整"
  echo ""
  exit 
}
#判定参数的个数,参数不能少于1个,且必须为限定参数:start,stop,adjust


if [ $# -lt 1 ]
then
  usage
fi
#设置需要占用的cpu比率,默认为50%
if [ "$2" == "" ]
then
  cpu_Rate=50
else
  cpu_Rate=$2
fi
#设置允许的波动范围,默认为5
if [ "$4" == "" ]
then
  adjustRange=5
else
  adjustRange=$4
fi
#停止
#没有参数
stop_thread(){
    if [ `ps -ef|grep $fileName|grep -v grep|awk '{print $2}'|wc -l` -ne 0 ]
    then
      ps -ef|grep $fileName|grep -v grep|awk '{print $2}'|xargs kill -9
    fi
}
#创建
#参数一个:cpu空闲时间和工作时间的比率,默认是1,对应脚本入参的第三个参数[sleeptime/worktime]
start_thread(){
    if [ "$1" == "" ]
    then
      rate=1
    else
      rate=$1
    fi
cat <<EOF > $fileName.c
    #include <time.h>
    #include <sys/time.h>
    #include <unistd.h>
    #include<stdlib.h>
    #include<math.h>

    #define DWORD unsigned long 
    #define UINT64 unsigned long long 
    const int INTERVAL = 300;

    int main(int argc,char* argv[] )
    {
        struct timeval tms;
        int half = INTERVAL/2,i;
        clock_t startTime = 0;
        while(1)
        {
            timerclear(&tms);
            gettimeofday(&tms,NULL);
            UINT64 startTime = tms.tv_usec;
            while(1)
            {
                timerclear(&tms);
                gettimeofday(&tms,NULL);
                UINT64 NowTime = tms.tv_usec;
                if((NowTime - startTime)/1000 > INTERVAL)
                    break;
            }
            if(usleep(INTERVAL*1000*$rate))
                exit(-1);    
        }
        return 0;
    }
EOF
    echo "编译 $fileName.c ... "
    gcc $fileName.c -o $fileName
    if [ $? -eq 0 ]; then
        echo "执行$fileName 开始... "
        echo
        cpuNum=`cat /proc/cpuinfo |grep processor|wc -l`
        for i in `seq 1 $cpuNum`
        do
        echo " ... 执行$fileName 第 "$i"次开始 ... "
        ./$fileName &
        echo " ... 执行$fileName 第 "$i"次结束 ... "
        echo
        done
        echo "执行$fileName 结束... "
      echo ""
    else
        echo "编译 $fileName.c ERROR! "
    fi
}
#自动调整cpu的使用率,使其满足cpu_Rate
# 第一个:sleep/work
times=1
adjustment(){
  stop_thread
  start_thread $1
  cur_cpu=`mpstat 1 5|awk '{if(NR==8){print $3}}'`
  if [ "$cur_cpu" \< "$(expr $cpu_Rate - $adjustRange)" -o "$cur_cpu" \> "$(expr $cpu_Rate + $adjustRange)" ]
  then
    echo "======期望cpu使用率:$cpu_Rate=====当前cpu使用率:$cur_cpu==========开始第【$((times++))】次调整==========="
    echo ""
    adjustment $(expr $cur_cpu/$cpu_Rate*$1)
  else
    echo "======期望cpu使用率:$cpu_Rate=====当前cpu使用率:$cur_cpu==========结束调整并退出========="
    echo ""
  fi
}


if [ $1 == 'start' ]
then
  stop_thread
  start_thread $3
fi
if [ $1 == 'adjust' ]
then
  stop_thread
  adjustment $3
fi
if [ $1 == 'stop' ]
then
  stop_thread
fi
目录
相关文章
|
5天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
95 1
|
16天前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
110 5
|
27天前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
38 0
|
2月前
|
Prometheus Kubernetes 监控
使用kubectl快速查看各个节点的CPU和内存占用量
在Kubernetes集群中,安装metrics-server,并使用kubectl快速查看集群中各个节点的资源使用情况。
93 0
|
3月前
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储
|
3月前
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
3月前
|
KVM 虚拟化
[kvm]cpu内存硬盘配置
[kvm]cpu内存硬盘配置
|
3月前
|
缓存 Linux 调度
Linux服务器如何查看CPU占用率、内存占用、带宽占用
Linux服务器如何查看CPU占用率、内存占用、带宽占用
880 0
|
4月前
|
缓存 Linux 虚拟化
linux 查看服务器cpu 与内存配置
linux 查看服务器cpu 与内存配置
573 4