由于项目组的需要,最近用bash shell实现了cpu load预警的脚本,之前完全没有过shell的经验,甚至连linux的经验也基本为零,所以写了一天多的时间算是勉强完成,关键地方还是别人指导的,实在是惭愧。其逻辑很简单,就是获取当前cpu load,如果超过预定的值,就会发送邮件或者短信报告相关人员。
#!/bin/bash
#cpu load / cpu count load和cpu个数的比值
cpu_load_threshold=1.50
now_time=`date +"%Y-%m-%d-%H:%M:%S"`
ip=`/sbin/ifconfig | grep inet | awk '{print $2 }' | cut -d: -f2 | sed -n '2p'`
cpu_nums=`cat /proc/cpuinfo | grep "processor"|wc -l`
load_average=`w | grep 'average' | cut -d',' -f4 | cut -d':' -f2 | cut -d' ' -f2`
load5=`w | grep 'average' | cut -d',' -f5 | cut -d' ' -f2`
load15=`w | grep 'average' | cut -d',' -f6 | cut -d' ' -f2`
threshold=`awk 'BEGIN{printf "%.4f\n","'"$load_average"'"/"'"$cpu_nums"'"}'`
if [ $threshold \> $cpu_load_threshold ]
then
msg="cpu%20load%20alarm""[${load_average},${load5},${load15}]%20""${now_time}%20""${ip}%20""CPUCount""${cpu_nums}"
# echo "the mail send begin..."
# echo -e "$msg" > mail.txt
# mail -s "cpu load alarm" xxx.com < mail.txt
# echo "the mail send end..."
#sms list
echo "the sms send begin..."
#短信发送的实现
echo "the sms send end..."
fi
如果用java实现,恐怕不到半天就可以搞定,我特别讨厌shell的语法,乱七八糟的字符,毫无代码质量可言,出现了错误也找不出问题。可能是java先入为主的原因,不过多学一种工具终究是好的。
shell一些基本的语法
Bash shell中对变量的赋值不能有空格,有空格的话,它会把它当做命令:
比如:
[root@SJSWT36-139
~]# a =5
-bash: a: command
not found
[root@SJSWT36-139
~]# a= 5
-bash: 5: command
not found
如果你要想将一个命令执行返回的结果赋给一个变量的话,你可能会写成a= w
但实际上a没有得到w命令的结果,这条语句只是简单的执行了w,要想将其结果赋值给a,可以采用`command` 倒引号:a=`w`
在shell中,空格很重要,比如if语句中括号前后都要有空格才行,遇到错误的时候也要想一下是不是空格的问题。
在shell中,没有>符号,如果要使用>,需要转义:\>
shell中的单引号和双引号:
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。
而在awk中,却有所不同:
awk 'BEGIN{printf "%.2f\n",$a/$b}'和awk 'BEGIN{printf "%.2f\n","$a"/"$b"}'都是不对的
而是awk
'BEGIN{printf "%.2f\n",'$a'/'$b'}',因为外面也有一个单引号,所以为了避免重复,可以将中间的单引号转义:
awk
'BEGIN{printf "%.2f\n","'"$a"'"/"'"$b"'"}'
CPU LOAD
Load 就是对计算机干活多少的度量(WikiPedia: the system load is a measure of the amount of work that a computer system is doing)。也有简单的说是进程队列的长度. Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。【最好的参考文章:UNIX® Load Average Part 1: How It Works】
load的刷新频率
load并不是上面说所的1 分钟、5分钟、15分钟刷新一次,而是5秒钟刷新一次(CALC_LOAD 每5HZ计算一次, 5HZ 为 5秒钟,这里的 HZ是系统定义的变量),所以你不能精确获取当前load,也会遇到这种情况:当你收到load短信预警但是马上去查看的时候却不是那个值。
cpu使用率和cpu load
cpu使用率很高,cpu load不一定很高,同样,cpu load很高,cpu使用率不一定很高,比如队列里都是网络或者I/O任务,所以不能简单的认为短时间cpu load很高就是cpu处理能力不行。
Load 高只是代表需要运行的队列累积过多了。但队列中的任务实际可能是耗 CPU的,也可能是耗 I/O 乃至其它因素的。
分享到:
相关推荐
本节介绍的几段shell脚本,可以用于提取磁盘的I/O信息,系统负载Load信息等
运维相关常用shell脚本.zip ...2. 查看系统状态的脚本:cpu、disk、iostat、load、memory、swap、vmstat 等 3. 安装 mariadb 的脚本 4. 安装 keeplived 的脚本 5. 安装 golang 的脚本 6. 安装 elk 脚本 7. 磁盘分区脚本
shell封装oracle sqlload背景功能简介用法案例 背景 从事于数据方面工作的小伙伴们,在工作做经常会入库一些文件,比如excel,CSV,文本文件。很多小伙伴们都是采用plsql或者其他工具软件,通过粘贴复制到表中,或者...
一个组件实现lazyload图片当在视窗内(或附近)时才加载
项目压力测试文件(cpuload)
仿真软件二次开发
Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考.pdf
ConfigLoader Shell脚本可直接加载我的设置用法通过https: $ git clone --recurse-submodules https://github.com/tomMoulard/configLoader.git $HOME /workspace/configLoader/$ cd $HOME /workspace/configLoader...
具有32个通用寄存器、一个程序计数器PC、一个标志寄存器FLAG,一个堆栈寄存器STACK。存储器寻址粒度为字节。数据存储以32位字对准。采用32位定长指令格式,采用Load/Store结构,ALU指令采用三地址格式。支持有符号和...
Sybase IQ数据库一个通过option导出全部的表,然后通过load导入另外一个表。
32位高性能嵌入式CPU中Load Aligner模块的设计与实现.pdf
loadScript异步加载脚本函数,javascript调用的一些常用处理方法
一个用于声明性 shell 脚本的简单库 有没有想过你的 shell 程序会保持模块化和组件化,即使它们在增长? 曾经想在您的 shell 脚本中添加一个插件框架,同时保持简单吗? 曾经想沉迷于您的函数式编程方面,即使是在...
let cpu = require ( 'cpu-load' ) // track the CPU load over the next 1 second cpu ( 1000 , function ( load ) { load //=> 0.03 (3%) } ) CPU 负载在多核机器上平均。 无需将 CPU 负载结果除以内核数。
计算DM642 cpu占用率,在ccs目录下也有。 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。20字。
react-load-script, 响应组件,可以轻松加载 3rd 个参与方脚本 react-load-script 这里软件包简化了在你的反应应用程序中加载 3rd 参与方脚本。动机在应用程序( jQuery,用于绘制图表的D3.js,等等 ) 中,需要使用 ...
32位高性能嵌入式CPU中Load Aligner 模块的设计与实现 同济大学微电子中心 张书 王颖 林正浩 引言 一般的,在CPU中,访问寄存器比访问主存速度要快。所以为了减少访问存储器而花的时间或延迟,MIPS4KC处理器采用了...
shell脚本报错:”[: =: unary operator expected”解决办法 在匹配字符串相等时,我用了类似这样的语句: if [ $STATUS == OK ]; then echo OK fi 在运行时出现了 [: =: unary operator expected 的错误,就...
这将包含我的 shell 脚本,这些脚本使用 aws 命令行工具将 ec2 实例和 elb loadballancers 自行注册到 icinga 监控服务器。 假设您在 icinga 中配置了相关的主机组 这不是作为最终产品,而是作为如果有人感兴趣的...