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
| #/bin/bash
# LY
# ------------------
# Copyright 2014.11.25 LingYi (lydygly@163.com) QQ:1519952564
get_file_num(){
big_num=$1
small_num=$2
NUM=$3
file_num_perc=$( echo "${big_num}-${small_num}" | bc )
file_num_moment=$( echo "$( echo "0$(echo "scale=2; ${file_num_perc}/100" | bc)" )*${NUM}" | bc )
file_num_one=$( echo ${file_num_moment} | awk -F. '{print $1}' )
file_num_two=$( echo ${file_num_moment} | awk -F. '{print $2}' )
[[ ${file_num_two:0:1} -eq 0 ]] && file_num_two=${file_num_two:1:1}
[[ ${file_num_two} -ge 50 ]] && let file_num_one++
echo ${file_num_one}
}
clean_up(){
umount ${memory_dir} && rm -fr ${memory_dir}
rm -fr .test_memory_file_sum.file
}
if [[ ! -f /usr/bin/bc ]]; then
echo "Try to install bc tool ... "
yum install -y bc >/dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo -e "[1;31mTool: \"bc\" install failed !![0m"
exit 1
fi
fi
trap 'clean_up &>/dev/null; tput cnorm; echo -e "[0m"; exit 0' 2
echo -e "[1;32mInput the percentage that you want, if empty then only monitor."
echo -e "[1;32m\"Ctrl + C\" to exit."
echo -ne "[1;34mInput the percentage[ "
echo -ne "[1;31meg:50 "
echo -ne "[1;34m]: "
read keep_busy_perc
if [[ $keep_busy_perc == "q" ]] || [[ $keep_busy_perc == "Q" ]]; then exit 0; fi
memory_dir=".memory.$(date +"%Y%m%d%H%M%S")"
mkdir -p ${memory_dir}
if [[ $? -ne 0 ]]; then echo "Create memory test dir failed !!"; exit 1; fi
memory_sum=$( free -m | awk '{print $2}'|sed -n '2p' )
mount -t tmpfs -o size=${memory_sum}M tmpfs ${memory_dir}
tput civis
while :; do
memory_used=$( free -m | awk '{print $3}' | sed -n '2p' )
memory_free=$( echo "${memory_sum}-${memory_used}" | bc )
memory_busy_perc=$( echo "scale=2; $( echo "scale=4; ${memory_used}/${memory_sum}*100" | bc)/1" | bc )
tput cup 00; tput ed
echo -e "[1;32mmemory sum :[1;34m$(printf "%-8s" " ${memory_sum}")[1;32mM"
echo -e "[1;32mmemory used:[1;35m$(printf "%-8s" " ${memory_used}")[1;32mM"
echo -e "[1;32mmemory free:[1;36m$(printf "%-8s" " ${memory_free}")[1;32mM"
echo -e "[1;32mmemory perc:[1;31m$(printf "%-8s" " ${memory_busy_perc}")[1;32m%"
echo -ne "[0m"
one=$( echo ${memory_busy_perc} | awk -F. '{print $1}')
two=$( echo ${memory_busy_perc} | awk -F. '{print $2}')
[[ ${two:0:1} -eq 0 ]] && two=${two:1:1}
[[ ${two} -ge 50 ]] && let one++
if [[ -z $( ls ${memory_dir} ) ]]; then
if [[ ${keep_busy_perc} -gt ${one} ]]; then
echo -ne "[1;31mInitializating ...[0m"
file_sum=$( get_file_num ${keep_busy_perc} ${one} ${memory_sum} )
echo ${file_sum} >.test_memory_file_sum.file
for ((i=1; i<=file_sum; i++)); do
dd if=/dev/zero of=${memory_dir}/${i} bs=1M count=1 &
done >/dev/null 2>&1
wait
fi
else
if [[ ${keep_busy_perc} -gt ${one} ]]; then
file_num=$( get_file_num ${keep_busy_perc} ${one} ${memory_sum} )
file_sum=$(echo "`cat .test_memory_file_sum.file`+${file_num}" | bc)
echo ${file_sum} >.test_memory_file_sum.file
for ((i=file_num+1; i<=${file_sum}; i++)); do
dd if=/dev/zero of=${memory_dir}/${i} bs=1M count=1 &
done >/dev/null 2>&1
wait
fi
if [[ ${keep_busy_perc} -lt ${one} ]]; then
file_num=$( get_file_num ${one} ${keep_busy_perc} ${memory_sum} )
if [[ ${file_num} -gt $(cat .test_memory_file_sum.file) ]]; then
rm -fr ${memory_dir}/*
else
for ((i=0; i<file_num; i++));="" do
the_file_name=`echo "$(cat .test_memory_file_sum.file)-${i}" | bc`
rm -fr ${memory_dir}/${the_file_name}
done
fi
fi
fi
sleep 1
done
|