脚本应用之十六: 监控和消耗内存资源

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

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

演示:

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

输入欲消耗的内存百分比

代码专区:

#/bin/bash
 
#  LY
#  ------------------
#  Copyright 2014.11.25 LingYi ([email protected]) 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



附件下载源代码


时间: 2024-08-03 09:29:49

脚本应用之十六: 监控和消耗内存资源的相关文章

十六.监控系统cpu.内存,磁盘等,自动报警,发送邮件

发送邮箱小工具,将它放在#/usr/bin/mail  chmod +x /usr/bin/mail #!/usr/bin/python #-*- coding: UTF-8 -*- import sys import smtplib import email.mime.multipart import email.mime.text server = 'smtp.163.com' port = '25' def sendmail(server,port,user,pwd,msg): smtp

如何监控MYSQL消耗服务器资源

http://258xiaolei-sina-com.iteye.com/blog/764665 启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql MySQL 自带 slow log 的分析工具 mysqldumpslow. slow log 是 MySQL 根据 SQL 语句的执行时间设定,写入的一个文件,用于分析执行较慢的语句. 只要在 my.cnf 文件中配置好: log-slow-queries = [slow_quer

转:【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313 happen-before规则介绍 Java语言中有一个"先行发生"(happen-before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,"影响"包括修改了内存中共享变量的值.发送了消息.调用了方法等,它与时间上的先后发生基本没有

UWP开发入门(十六)——常见的内存泄漏的原因

本篇借鉴了同事翔哥的劳动成果,在巨人的肩膀上把稿子又念了一遍. 内存泄漏的概念我这里就不说了,之前<UWP开发入门(十三)——用Diagnostic Tool检查内存泄漏>中提到过,即使有垃圾回收机制,写C#还是有可能发生内存泄漏. 一般来说,以下两种情况会导致内存泄漏: 对象用完了但是没有释放资源 对象本身是做了清理内存的操作,但是对象内部的子对象没有成功释放资源 下面就UWP开发中具体的实例来说明需要避免的写法 从static/global的对象上注册了事件 FakeService.Ins

【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)

happen-before规则介绍 Java语言中有一个"先行发生"(happen-before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,"影响"包括修改了内存中共享变量的值.发送了消息.调用了方法等,它与时间上的先后发生基本没有太大关系.这个原则特别重要,它是判断数据是否存在竞争.线程是否安全的主要依据. 举例来说,假设存在如下三个线程,分别执行对应

MYSQL进阶学习笔记十六:MySQL 监控!(视频序号:进阶_35)

知识点十六:MySQL监控(35) 一.为什么使用MySQL监控 随着软件后期的不断升级,myssql的服务器数量越来越多,软硬件故障的发生概率也越来越高.这个时候就需要一套监控系统,当主机发生异常时,此时通过监控系统发现和处理. 这个监控实际上是在我们的开发完成之后,这个时候软件就开始在运行,这个运行我们就需要去关注到mysql服务器是否正常,那么我们要观察它就需要给它提供一些监控,这监控就是当它发生故障之后, 那么我们这个监控就会告诉我们到底什么地方发生了一些异常或者一些错误,这个时候我们就

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除.在unity中,Transform面板一共有3个属性: Position  (位置) Rotation(旋转) Scale(缩放) 这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数. Position  (位置) 任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标.一旦Vector33容器中的坐标发生变化,那么Sce

Unity3D脚本中文系列教程(十六)

Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆  function OnPostprocessGameObjectWithUserProperties (root : GameObject, propNames : string[], values : object[]) : void 描述:在导入文件时,为每个至少附加了一个用户属性的游戏物体调用propNames是一个string[ ],

脚本应用之十五: 消耗cpu资源

作用:控制消耗cpu的百分比,配合某些测试项目使用 实现:设计包含死循环的函数,放入后台运行,通过控制个数实现控制消耗CPU资源的百分比 演示: 直接输入进程个数, 通过top指令查看cpu消耗百分比,不输入数字直接回车则表示清除所有后台函数 代码专区: #/bin/bash   #  LY #  ------------------ #  Copyright 2016.04.17 LingYi ([email protected]) QQ:1519952564 cpu_(){  while :