模拟占用磁盘内存CPU

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 模拟占用磁盘内存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
目录
相关文章
|
1月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
352 0
|
1月前
|
存储 消息中间件 缓存
从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?
在数据爆炸的时代,如何高效存储与管理海量数据成为系统设计的核心挑战。本文从计算机存储体系结构出发,解析B+树、LSM树与Kafka日志结构在不同数据库中的应用与优化策略,帮助你深入理解高性能存储背后的原理。
71 0
|
3月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
942 0
|
2月前
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。
|
3月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
271 0
|
5月前
|
数据可视化 Linux iOS开发
Python测量CPU和内存使用率
这些示例帮助您了解如何在Python中测量CPU和内存使用率。根据需要,可以进一步完善这些示例,例如可视化结果或限制程序在特定范围内的资源占用。
218 22
|
7月前
|
存储 设计模式 监控
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
183 0
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
|
8月前
|
存储 固态存储
磁盘和内存的区别
存储特性: • 磁盘:非易失性存储,数据在断电后不会丢失,适合长期存储数据。 • 内存:易失性存储,数据在断电后会丢失,适合临时存储当前运行的程序和数据。 容量: • 磁盘:容量通常较大,从几百GB到数TB不等,适合存储大量的文件和数据。 • 内存:容量相对较小,一般在几GB到几十GB之间,用于提供快速的临时存储空间。 速度: • 磁盘:读写速度较慢,HDD一般在几十MB/s,SSD可以达到几百MB/s甚至数GB/s。 • 内存:读写速度非常快,通常在几十纳秒到几百纳秒之间,能够快速响应CPU的指令。
405 2
|
9月前
|
存储 设计模式 监控
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
947 166

热门文章

最新文章