模拟占用磁盘内存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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 模拟占用内存(缓存占用)
#使用虚拟内存构造内存消耗
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 模拟生成文件占用磁盘
# 命令
# 生成一个100G文件,文件目录、名为/opt/temp/data.zip
fallocate -l 100G /opt/temp/data.zip
1
2
2
# 通用脚本
#!/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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 模拟使用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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
上次更新: 2023/03/10, 16:49:38