Shell----监控CPU/内存/负载高时的进程
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/内存/负载高时的进程的更多相关文章
- 利用shell监控cpu、磁盘、内存使用率
利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ################################# ...
- Android去除CPU占用过高时屏幕四周闪红框
话说有些时间没有更新博客了,今天正好解决这个问题,顺便把它记录下来.. 今天遇到的情况是这样的,当CPU占用过高时,屏幕四周会出现一个红框. 闪一次两次算了,但是挺萌的(TMD)不停的闪,我的钛合金狗 ...
- linux Java项目CPU内存占用高故障排查
linux Java项目CPU内存占用高故障排查 top -Hp 进程号 显示进程中每个线程信息,配合jstack定位java线程运行情况 # 线程详情 jstack 线程PID # 查看堆内存中的对 ...
- linux实现shell脚本监控磁盘内存达到阈值时清理catalina.out日志
想在服务器上写一个shell脚本,在磁盘使用率达到80%时,自动清理掉一些没有用的日志文件,根据这个想法,在生产环境上写了一个以下脚本,按照该流程,可实现在linux环境做一个定时任务来执行shell ...
- linux中Java项目占用cpu、内存过高时的排查经历
一.使用top命令查看占用高资源的java项目的进程ID(pid): top 二.查看该进程中的线程所占用资源的情况:top -Hp pid 三.查看该线程对应的16进制:printf %x 1112 ...
- centos8平台使用pidstat监控cpu/内存/io
一,安装pidstat: 1,安装 [root@localhost yum.repos.d]# yum install sysstat 2,查看版本: [root@localhost ~]# pids ...
- Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心
在阅读Nginx模块开发与架构模式一书时: "Nginx 上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...
- shell脚本监控cpu/内存使用率 转
该脚本检测cpu和内存的使用情况,只需要调整memorySetting.cpuSetting.userEmail要发邮件报警的email地址即可 如果没有配置发邮件参数的哥们,已配置了的,直接飞到代码 ...
- Shell采集系统cpu 内存 磁盘 网络信息
cpu信息采集 cpu使用率 采集算法 通过/proc/stat文件采集并计算CPU总使用率或者单个核使用率.以cpu0为例,算法如下: 1. cat /proc/stat | grep ‘cpu0’ ...
随机推荐
- 深度分析:Java 静态方法/变量,非静态方法/变量的区别,今天一并帮你解决!
静态/非静态 方法/变量的写法 大家应该都明白静态方法/字段比普通方法/字段的写法要多一个static关键字,简单写下他们的写法吧,了解的可以直接略过 class Test{ // 静态变量 publ ...
- 怎么用Camtasia给视频添加片头片尾
有许多朋友现在喜欢自己拍摄一些小视频,现在不管是在抖音还是在B站,我们看到的大部分视频都有UP主自己制作的片头或片尾.片头做的好,甚至会有人因为片头而关注UP主,能吸引更多的人来观看视频. 所以,如果 ...
- 工作中使用mongodb
写了一个mongodb的基类 1 <?php 2 3 namespace BI\Service\MongoDB; 4 5 use MongoDB\Driver\BulkWrite; 6 use ...
- Apiview+serallizers
1.APIVIEW使用 https://www.cnblogs.com/xiaonq/p/10124104.html ModelVIewSet是对APIView封装 ModelSerializer是对 ...
- Linux 学习笔记03丨Linux文件系统、文件基本属性、目录处理及文件查看
Chapter 2. 文件系统 2.1 Linux 系统目录结构 命令窗口下输入命令: $ ls /,能够看到根目录下的全部目录及文件 树状目录结构为: 最顶级的目录: / :根目录 / 是根目录,~ ...
- [TroubleShootting]Zabbix数据采集出现断点的问题
背景 最近发现公司的Zabbix监控大屏上的监控图经常出现数据断点的现象,主要集中在一些自定义的监控项数据上,如下图: 原因 查看Zabbix Server日志以及zabbix官方手册后,分析可能原因 ...
- mysql反序索引
关于mysql的排序 参考:https://www.cnblogs.com/lccsblog/p/12733773.html 转载: https://www.cnblogs.com/lynn919/p ...
- tomcat安装及环境变量配置
java环境的配置应该都学过吧,这里简单的讲一下. 下载安装java JDK,注意安装的路径,我们需要进行环境变量的配置. 2 安装完成以后,配置环境变量 环境变量的配置这里就以win7为例:右击计算 ...
- Java支付项目实战教程,包括支付宝,微信等支付方式,不看亏!
须知:视频来源网络,侵权请联系删除! 获取方式 扫描下面二维码回复:1024
- java并发编程实战《二》java内存模型
Java解决可见性和有序性问题:Java内存模型 什么是 Java 内存模型? Java 内存模型是个很复杂的规范,可以从不同的视角来解读,站在我们这些程序员的视角,本质上可以理解为, Java 内存 ...