监控和消耗内存资源

时间:2021-07-07 17:24:21

作用:监控或消耗内存资源, 指定需要消耗到的百分比

实现:通过在内存中写入一定大小的文件实现


演示:

直接回车,查看当前内存的百分比

监控和消耗内存资源


监控和消耗内存资源


输入欲消耗的内存百分比

监控和消耗内存资源


监控和消耗内存资源


监控和消耗内存资源


代码专区:

#/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 "\033[1;31mTool: \"bc\" install failed !!\033[0m"
exit 1
fi
fi

trap 'clean_up &>/dev/null; tput cnorm; echo -e "\033[0m"; exit 0' 2

echo -e "\033[1;32mInput the percentage that you want, if empty then only monitor."
echo -e "\033[1;32m\"Ctrl + C\" to exit."
echo -ne "\033[1;34mInput the percentage[ "
echo -ne "\033[1;31meg:50 "
echo -ne "\033[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 "\033[1;32mmemory sum :\033[1;34m$(printf "%-8s" " ${memory_sum}")\033[1;32mM"
echo -e "\033[1;32mmemory used:\033[1;35m$(printf "%-8s" " ${memory_used}")\033[1;32mM"
echo -e "\033[1;32mmemory free:\033[1;36m$(printf "%-8s" " ${memory_free}")\033[1;32mM"
echo -e "\033[1;32mmemory perc:\033[1;31m$(printf "%-8s" " ${memory_busy_perc}")\033[1;32m%"
echo -ne "\033[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 "\033[1;31mInitializating ...\033[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




附件下载源代码


本文出自 “逆行者” 博客,请务必保留此出处http://lingyi.blog.51cto.com/2837715/1764783