#!/bin/bash
export PATH
export LANG=zh_CN.UTF-8
#
#
#top之后输入数字1,可以查看每颗CPU的情况.
#
#
#先配置好mailx邮箱账号密码:
#cat>/etc/mail.rc<<"EOF"
#set sendcharsets=iso-8859-1,utf-8
#set from=xxx@163.com
#set smtp=smtp.163.com
#set smtp-auth-user=xx@163.com
#set smtp-auth-password=xxx
#set smtp-auth=login
#EOF
#文件存放位置
#
#判断是否安装bc
ping -c 2 www.baidu.com || exit 5
[ `echo "1 > 2"|bc` ] || yum install bc -y
sleep 3
[ `rpm -qa|grep dos2unix` ] || yum install dos2unix -y
sleep 3

#
#
#时间
readonly times=$(date +%Y"/"%m"/"%d" "%k":"%M)
#服务器IP
readonly machine=$(ip add | grep inet|grep -v 'inet6\|127.0.0.1'|awk '{ print $2 }' | sed 's/\/.*$//')
readonly names=$(hostname)
#cpu个数
readonly cpuinfos=$(cat /proc/cpuinfo|grep processor|wc -l)
#在线用户数
readonly onlines='2'
#cpu负载阈值
readonly cpuload='80'
#判断用户在线数
userd=$(top -n 1|grep users|awk -F '[, ]+' '{print $6}')
whos=$(who)
if [ $userd > $onlines ];then
echo "$times $machine 当前在线用户数: $whos"
fi

#
#
function top_check(){
#服务器运行多久
runup=$(top -n 1|grep user|awk -F '[, ]+' '{print $5}')
#用户空间占用CPU百分比
cpuus=$(top -n 1|grep Cpu|awk -F "," '{print $1}'|awk -F " " '{print $2}')
#内核空间占用CPU百分比
cpusy=$(top -n 1|grep Cpu|awk -F "," '{print $2}'|awk -F " " '{print $2}')
#改变过优先级的进程占用CPU的百分比
cpuni=$(top -n 1|grep Cpu|awk -F "," '{print $3}'|awk -F " " '{print $2}')
#空闲CPU百分比
cpuid=$(top -n 1|grep Cpu|awk -F "," '{print $4}'|awk -F " " '{print $2}')
#I/O等待占用CPU的百分比
cpuwa=$(top -n 1|grep Cpu|awk -F "," '{print $5}'|awk -F " " '{print $2}')
#硬中断占用CPU的百分比
cpuhi=$(top -n 1|grep Cpu|awk -F "," '{print $6}'|awk -F " " '{print $2}')
#软中断占用CPU的百分比
cpusi=$(top -n 1|grep Cpu|awk -F "," '{print $7}'|awk -F " " '{print $2}')
#虚拟 CPU 等待实际 CPU 的时间的百分比
cpust=$(top -n 1|grep Cpu|awk -F "," '{print $8}'|awk -F " " '{print $2}')
}

function load_time(){
#一分钟负载
load1=$(top -n 1|grep user|awk -F '[, ]+' '{print $11}')
#五分钟负载
load5=$(top -n 1|grep user|awk -F '[, ]+' '{print $12}')
#十五分钟负载
load15=$(top -b -n 1|grep user|awk '{print $NF}')
}

function load_mem(){
#内存总容量
memtotal=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $4}') / 1024))
#当前空闲内存
memfree=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $7}') / 1024))
#当前已使用内存
memused=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $10}') / 1024))
#内存buff/cache
membuff=$(($(top -n 1|grep buff/cache|awk -F '[, ]+' '{print $13}') / 1024))
#swap总容量
swaptotal=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $3}') / 1024))
#swap当前空闲
swapfree=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $6}') / 1024))
#swap当前已使用
swapused=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $9}') / 1024))
#swap内存avail Mem
swapavail=$(($(top -n 1|grep avail|awk -F '[, ]+' '{print $11}') / 1024))
}

function echo_run(){
echo "$times $machine 运行多久: $runup 分钟 "
}

function echo_cpu(){
echo "$times $machine 用户空间占用CPU百分比: $cpuus "
echo "$times $machine 内核空间占用CPU百分比: $cpusy "
echo "$times $machine 改变过优先级的进程占用CPU的百分比: $cpuni "
echo "$times $machine 空闲CPU百分比: $cpuid "
echo "$times $machine I/O等待占用CPU的百分比: $cpuwa"
echo "$times $machine 硬中断占用CPU的百分比: $cpuhi "
echo "$times $machine 软中断占用CPU的百分比: $cpusi "
echo "$times $machine 虚拟 CPU 等待实际 CPU 的时间的百分比: $cpust "
}

function echo_mem(){
echo "$times $machine 内存总容量: $memtotal M "
echo "$times $machine 空闲内存: $memfree M "
echo "$times $machine 已使用内存: $memused M "
echo "$times $machine 内存buff/cache: $membuff M "
echo "$times $machine swap总共: $swaptotal M "
echo "$times $machine swap空闲: $swaptotal M "
echo "$times $machine swap已使用: $swapused M "
echo "$times $machine swap内存avail Mem: $swapavail M "
}

function echo_load(){
echo "$times $machine 1分钟CPU负载: $load1 "
echo "$times $machine 5分钟CPU负载: $load5 "
echo "$times $machine 15分钟CPU负载: $load15 "
}

#调用函数
top_check
load_time
load_mem
#
if [ `echo "$load1 > $cpuinfos"|bc` -eq 1 ];then
readonly runlog="/tmp/runs.log"
echo_run >$runlog
readonly loadlog="/tmp/load.log"
echo_load >$loadlog
readonly cpulog="/tmp/cpus.log"
echo_cpu >$cpulog
readonly memlog="/tmp/mems.log"
echo_mem >$memlog
#发送邮件
dos2unix -k $runlog
dos2unix -k $loadlog
dos2unix -k $cpulog
dos2unix -k $memlog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $runlog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $loadlog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $cpulog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $memlog
fi

#判断I/O wa是否过高
if [ `echo "$cpuwa > 60"|bc` -eq 1 ];then
readonly ioslogs="/tmp/wa.log"
iostat -cdx 3 > $ioslogs
dos2unix -k $ioslogs
mailx -s "服务器$names $machine的负载wa%" lumia98@vip.qq.com < $ioslogs
fi

#判断磁盘空间不足
disks=$(df | grep /dev|grep -v "shm\|boot\|devtmpfs"|awk '{print $5}'|sed 's/\%.*$//')
for x in $disks
do
if [ $x -gt 70 ]; then
disklog="/tmp/disk.log"
df -h >$disklog
dos2unix -k $disklog
mailx -s "服务器$names $machine" lumia98@vip.qq.com < $disklog
fi
done

linux系统CPU内存磁盘监控发送邮件脚本的更多相关文章

  1. linux系统CPU,内存,磁盘,网络流量监控脚本

    前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...

  2. Linux系统CPU的性能监控及调优

    前言: 性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的 ...

  3. C/C++获取Linux系统CPU和内存及硬盘使用情况

    需求分析: 不使用Top  df  free 等命令,利用C/C++获取Linux系统CPU和内存及硬盘使用情况 实现: //通过获取/proc/stat (CPU)和/proc/meminfo(内存 ...

  4. Java获取Linux系统cpu使用率

    原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.Fi ...

  5. Linux系统cpu 100%修复案例

    Linux系统cpu 100%修复案例 ​阿里云技术支持团队:完颜镇江 案例背景: Linux主机连续三天CPU% 处理思路: 1.  登录服务器查看/var/log/messages+/var/lo ...

  6. 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络

    程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...

  7. linux系统下重启tomcat的shell脚本

    linux系统下重启tomcat的shell脚本: #!/bin/shtomcat_home=/opt/apache-tomcat- #找到tomcat进程的id并kill掉 ps -ef |grep ...

  8. Linux系统格式化新磁盘并挂载分区

    Linux系统格式化新磁盘并挂载分区 在虚拟机的设置界面中,我们可以选择添加硬盘 添加好硬盘后,我们输入命令fdisk -l 看到有一个未经分区的硬盘 Fdisk命令编辑这个硬盘 输入n创建分区,p选 ...

  9. Linux系统CPU相关信息查询

    Linux系统CPU相关信息查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.lscpu常用参数介绍 1>.查看帮助信息 [root@node105 ~]# lscpu ...

随机推荐

  1. Emgu学习之(三)——操作图像数据

    Visual Studio Community 2015 工程和代码:http://pan.baidu.com/s/1jHmlQeE 内容 在这篇文章中将提到以下内容: 修改像素值 图像ROI 图像加 ...

  2. 【转】实现Http Server的三种方法

    一.使用SUN公司在JDK6中提供的新包com.sun.net.httpserver JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持 ...

  3. SVN篇

    启动SVN : svnserve -d -r svn 查看进程: ps -ef | grep svmserve -------------------------------------------- ...

  4. loadrunner脚本中参数化和返回值输出log到外部文件

    loadrunner脚本中参数化和返回值输出log到外部文件 很多时候,我们在做性能测试之前,需要造数据,但是使用的这些参数化数据和生成的返回数据在后面的测试都会用的,所以我们需要在造数据过程中,将参 ...

  5. 在Eclipse中执行、配置Hadoop

    版权全部: zhe-jiang.he@hp.com  严禁转载! 1.安装插件 准备程序: eclipse-3.3.2(这个版本号的插件仅仅能用这个版本号的eclipse) hadoop-0.20.2 ...

  6. Oracle下通过EXPDP导出某用户下的所有表,实例

    一开始在所数据库表导入,导出的时候,经常发现含有BLOB等大数据类型文件无法简单正常的导入导出(imp/dmp),然后在网上得知oracle 10以后有了(impdp/dmpdp)命令,数据导入导出的 ...

  7. mysql数据库的导入导出命令

    1.备份一个数据库 mysqldump -h localhosot -uroot -ppassword 数据库名>数据库所在路径(路径+数据库名.sql) 注意:导出的数据库文件.sql文件不能 ...

  8. (解释文)My SQL中主键为0和主键自排约束的关系

    上一篇我们说了关于自排如果主键是0的问题,在这里我搞清楚了原因,导致这种情况是因为在SQL中对自排设置了初始值: 从这里可以看到这两个变量一个是自增的初始值,一个是增量,这里都是1,所以在设置自增的时 ...

  9. 【Zookeeper】编程实战之Zookeeper分布式锁实现秒杀

    1. Zookeeper简述 我们要了解一样技术,首先应该要到它的官网,因为官网的信息一般都是最准确的,如下图是Zookeeper官网对它的介绍. 从官网的介绍中,可以总结出,Zookeeper是一个 ...

  10. 树莓派 ubuntu16.04 安装SSH 配置SSH 开机自启SSH

    入手个树莓派3B 装了 ubuntu 16.04 需要用到SSH 记录下 0.先获得树莓派IP 树莓派 使用网线连接路由器和树莓派 在路由器设置页面(一般是192.168.1.1具体看路由器的型号和设 ...