Shell----监控CPU/内存/负载高时的进程

1、编写脚本

vim cpu-warning.sh

#!/bin/bash
#监控系统cpu的情况脚本程序 #取当前空闲cpu百份比值(只取整数部分)
[ ! -f /bin/sar ] && yum install sysstat -y &>/dev/null
cpu_idle=`sar -u 1 5|awk 'END{print $NF}'|awk -F'.' '{print $1}'` #设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警...
if (($cpu_idle < 20)); then #取系统当前时间(以覆盖的方式写入文件>)
date >> /home/sunli/scripts/cpu_day.txt #提取服务器1分钟、5分钟、15分钟的负载情况
top -b -n 1 | grep Cpu >> /home/sunli/scripts/cpu_day.txt # 提取服务器占cpu和内存最高前10位进程程序情况
echo "%MEN top 10" >> /home/sunli/scripts/cpu_day.txt
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head >> /home/sunli/scripts/cpu_day.txt
echo "%CPU top 10" >> /home/sunli/scripts/cpu_day.txt
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head >> /home/sunli/scripts/cpu_day.txt
fi

vim load-warning.sh

load_15=`uptime | awk '{print $NF}'`

#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc` #取上面平均负载值的个位整数
average_int=`echo $average_load | cut -f 1 -d "."` #设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
load_warn=0.70 #当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
#if (($average_int > 0)); then
# /home/sunli/scripts/load-check.sh
#else #当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
load_now=`expr $average_load \> $load_warn` #如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
if (($load_now == 1)); then #取系统当前时间(以覆盖的方式写入文件>)
date >> /home/sunli/scripts/load_day.txt #提取服务器1分钟、5分钟、15分钟的负载情况
uptime | awk '{print $8,$9,$10,$11,$12}' >> /home/sunli/scripts/load_day.txt # 提取服务器占cpu和内存最高前10位进程程序情况
echo "%MEN top 10" >> /home/sunli/scripts/load_day.txt
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head >> /home/sunli/scripts/load_day.txt
echo "%CPU top 10" >> /home/sunli/scripts/load_day.txt
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head >> /home/sunli/scripts/load_day.txt
fi
#fi

vim mem-warning.sh

#!/bin/bash
#系统分配的交换分区总量
Mem_total=`free -m | grep Mem| awk '{print $2}'` #当前剩余的交换分区free大小
Mem_free=`free -m | grep Mem| awk '{print $4}'` #当前已使用的交换分区used大小
Mem_used=`free -m | grep Mem| awk '{print $3}'` if (($Mem_used != 0)); then #如果交换分区已被使用,则计算当前剩余交换分区free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
Mem_per=0`echo "scale=2;$Mem_free/$Mem_total" | bc` #设置交换分区的告警值为20%(即使用超过80%的时候告警)。
Mem_warn=0.20 #当前剩余交换分区百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
Mem_now=`expr $Mem_per \> $Mem_warn` #如果当前交换分区使用超过80%(即剩余小于20%,上面的返回值等于0),立即发邮件告警
if (($Mem_now == 0)); then
#取系统当前时间(以覆盖的方式写入文件>)
date >> /home/sunli/scripts/mem_day.txt #提取服务器1分钟、5分钟、15分钟的负载情况
free -m >> /home/sunli/scripts/mem_day.txt # 提取服务器占mem和内存最高前10位进程程序情况
echo "%MEN top 10" >> /home/sunli/scripts/mem_day.txt
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head >> /home/sunli/scripts/mem_day.txt
echo "%CPU top 10" >> /home/sunli/scripts/mem_day.txt
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head >> /home/sunli/scripts/mem_day.txt
fi
fi

2、计划任务

crontab -e

*/1 * * * *  /home/sunli/scripts/load-warning.sh > /dev/null 2>&1
*/1 * * * * /home/sunli/scripts/cpu-warning.sh > /dev/null 2>&1
*/1 * * * * /home/sunli/scripts/mem-warning.sh > /dev/null 2>&1

3、测试

安装系统压力测试工具

yum -y install stress

测试

stress --cpu 1

等待几分钟就可以查看啦

Shell----监控CPU/内存/负载高时的进程的更多相关文章

  1. 利用shell监控cpu、磁盘、内存使用率

    利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ################################# ...

  2. Android去除CPU占用过高时屏幕四周闪红框

    话说有些时间没有更新博客了,今天正好解决这个问题,顺便把它记录下来.. 今天遇到的情况是这样的,当CPU占用过高时,屏幕四周会出现一个红框. 闪一次两次算了,但是挺萌的(TMD)不停的闪,我的钛合金狗 ...

  3. linux Java项目CPU内存占用高故障排查

    linux Java项目CPU内存占用高故障排查 top -Hp 进程号 显示进程中每个线程信息,配合jstack定位java线程运行情况 # 线程详情 jstack 线程PID # 查看堆内存中的对 ...

  4. linux实现shell脚本监控磁盘内存达到阈值时清理catalina.out日志

    想在服务器上写一个shell脚本,在磁盘使用率达到80%时,自动清理掉一些没有用的日志文件,根据这个想法,在生产环境上写了一个以下脚本,按照该流程,可实现在linux环境做一个定时任务来执行shell ...

  5. linux中Java项目占用cpu、内存过高时的排查经历

    一.使用top命令查看占用高资源的java项目的进程ID(pid): top 二.查看该进程中的线程所占用资源的情况:top -Hp pid 三.查看该线程对应的16进制:printf %x 1112 ...

  6. centos8平台使用pidstat监控cpu/内存/io

    一,安装pidstat: 1,安装 [root@localhost yum.repos.d]# yum install sysstat 2,查看版本: [root@localhost ~]# pids ...

  7. Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心

    在阅读Nginx模块开发与架构模式一书时: "Nginx  上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...

  8. shell脚本监控cpu/内存使用率 转

    该脚本检测cpu和内存的使用情况,只需要调整memorySetting.cpuSetting.userEmail要发邮件报警的email地址即可 如果没有配置发邮件参数的哥们,已配置了的,直接飞到代码 ...

  9. Shell采集系统cpu 内存 磁盘 网络信息

    cpu信息采集 cpu使用率 采集算法 通过/proc/stat文件采集并计算CPU总使用率或者单个核使用率.以cpu0为例,算法如下: 1. cat /proc/stat | grep ‘cpu0’ ...

随机推荐

  1. 思维导图MindManager的过滤主题功能如何使用

    MindManager是一款多功能思维导图工具软件.但有的思维导图繁杂,用户只需要查看自己感兴趣的主题该怎么办呢?接下来,我就为大家详细介绍MindManager思维导图2020版的过滤主题功能,可以 ...

  2. CorelDRAW常用工具之橡皮擦工具

    很多作图以及设计软件都会自带橡皮擦工具,但对于专业做平面设计的小伙伴来说,普通的橡皮工具肯定是无法满足日常作图需求的,今天来看看CorelDRAW的橡皮擦能玩出什么花样来. 1.擦除对象 CorelD ...

  3. Linux 设置静态路由表

    一般来说多半不会使用到这个操作,但是最近有几台服务器需要多网卡,一个内网一个外网.导致网络访问内网有时候不通,这就需要我们手动写一下路由表了.操作如: 创建配置文件 网卡配置路径:/etc/sysco ...

  4. windows服务器下tomcat 8.0 配置远程调试

    在tomcat的bin目录下, 添加debug.txt文件, 然后输入: set JPDA_ADDRESS=9901set JPDA_TRANSPORT=dt_socketset CATALINA_O ...

  5. 编写测试用例 QQ账号6--10位自然数 某城市电话号码 126邮箱注册功能

  6. Django使用联合主键

    今天闲着没事,突然想起一个以前遇到的一个小问题.一直忘了来验证自己的解决方案,所以今天特意来查询了些资料来验证下自己的想法.整理如下: 单张表内建立联合主键: class IotTemp(models ...

  7. moviepy音视频剪辑:视频变换处理与内容相关的变换函数headblur、mask_and/or、mirror_x/y、rotate、painting、scroll介绍

    一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<moviepy音视频剪辑:视频剪辑基类VideoC ...

  8. 第三十三章、PyQt+moviepy实现的MP4视频转gif工具

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 在写<第三十二章.使用splitDockWidget和 ...

  9. 转:Python2字符编码问题汇总

    这篇文章的部分问题在Python3以后不再存在,老猿只是觉得文章的部分内容还是有参考价值,因此在此原文转发连接: Python2字符编码问题汇总

  10. CTFHub Web题学习笔记(SQL注入题解writeup)

    Web题下的SQL注入 1,整数型注入 使用burpsuite,?id=1%20and%201=1 id=1的数据依旧出现,证明存在整数型注入 常规做法,查看字段数,回显位置 ?id=1%20orde ...