linux load 监控,负载监控 ,shell 监控cpu,memory,load average,记录到log
来源:互联网 发布:金融建模需要会编程吗 编辑:程序博客网 时间:2024/05/23 00:10
shell 监控cpu,memory,load average,记录到log,当负载压力时,发电邮通知管理员。
平均负载是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数。
一般的进程需要消耗CPU、内存、磁盘I/O、网络I/O等资源,在这种情况下,平均负载就不是单独指的CPU使用情况。即内存、磁盘、网络等因素也可以影响系统的平均负载值。
在单核处理器中,平均负载值为1或者小于1的时候,系统处理进程会非常轻松,即负载很低。当达到3的时候,就会显得很忙,达到5或者8的时候就不能很好的处理进程了(其中5和8目前还是个争议的阈值,为了保守起见,建议选择低的)。
举例说明:
比如我的服务器是两颗CPU,每颗CPU有6个核,相当于12核的处理器。如果负载小于12,说明服务器利用率较低。如果负载大于12小于36,说明服务器利用率比较高,这个时候就应该考虑优化业务或者更换更快的CPU。如果负载大于36小于60,甚至超过60,则说明该服务器很危险,随时可能发生问题。经过上面的分析,我们用以下命令获取系统的平均负载值。
# top
# uptime
# w
平均负载值部分如:load average: 0.08, 0.03, 0.00.这些数值是指系统在最后1/5/15分钟的平均负载.那么我们判断负载过高,要以哪个值为准呢?根据经验:我们应该把重点放在5/15分钟的平均负载,因为1分钟的平均负载太频繁,一瞬间的高并发就会导致该值的大幅度改变。其中top的第一行与uptime的结果相同
uptime
top
[linuxidc@linuxidc ~]# uptime
20:15:58 up 7 min, 1 user, load average: 0.00, 0.10, 0.08
其中
20:15:58 up 系统启动时间
7 min 系统在线运行时间
load average 分别记录一分钟、五分钟、十五分钟的系统平均负载
主要是判断CPU的使用情况,现在的CPU都是多核心、多线程的模式。所以最终取决于总线程数。比如我们公司的CPU,是2个单元,每个单元是4核8线程。那么负载因子16的时候才算100%。
查看CPU信息使用
cat /proc/cpuinfo
如果只想得到线程数,则
grep 'model name' /proc/cpuinfo | wc -l
原理:
1.获取cpu,memory,load average的数值
2.判断数值是否超过自定义的范围,例如(CPU>90%,Memory<10%,load average>2)
3.如数值超过范围,发送电邮通知管理员。发送有时间间隔,每小时只会发送一次。
4.将数值写入log。
5.设置crontab 每30秒运行一次。
ServerMonitor.sh
- #!/bin/bash
- # 系统监控,记录cpu、memory、load average,当超过规定数值时发电邮通知管理员
- # *** config start ***
- # 当前目录路径
- ROOT=$(cd "$(dirname "$0")"; pwd)
- # 当前服务器名
- HOST=$(hostname)
- # log 文件路径
- CPU_LOG="${ROOT}/logs/cpu.log"
- MEM_LOG="${ROOT}/logs/mem.log"
- LOAD_LOG="${ROOT}/logs/load.log"
- # 通知电邮列表
- NOTICE_EMAIL='admin@admin.com'
- # cpu,memory,load average 记录上一次发送通知电邮时间
- CPU_REMARK='/tmp/servermonitor_cpu.remark'
- MEM_REMARK='/tmp/servermonitor_mem.remark'
- LOAD_REMARK='/tmp/servermonitor_loadaverage.remark'
- # 发通知电邮间隔时间
- REMARK_EXPIRE=3600
- NOW=$(date +%s)
- # *** config end ***
- # *** function start ***
- # 获取CPU占用
- function GetCpu() {
- cpufree=$(vmstat 1 5 |sed -n '3,$p' |awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}')
- cpuused=$((100 - $cpufree))
- echo $cpuused
- local remark
- remark=$(GetRemark ${CPU_REMARK})
- # 检查CPU占用是否超过90%
- if [ "$remark" = "" ] && [ "$cpuused" -gt 90 ]; then
- echo "Subject: ${HOST} CPU uses more than 90% $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}
- echo "$(date +%s)" > "$CPU_REMARK"
- fi
- }
- # 获取内存使用情况
- function GetMem() {
- mem=$(free -m | sed -n '3,3p')
- used=$(echo $mem | awk -F ' ' '{print $3}')
- free=$(echo $mem | awk -F ' ' '{print $4}')
- total=$(($used + $free))
- limit=$(($total/10))
- echo "${total} ${used} ${free}"
- local remark
- remark=$(GetRemark ${MEM_REMARK})
- # 检查内存占用是否超过90%
- if [ "$remark" = "" ] && [ "$limit" -gt "$free" ]; then
- echo "Subject: ${HOST} Memory uses more than 90% $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}
- echo "$(date +%s)" > "$MEM_REMARK"
- fi
- }
- # 获取load average
- function GetLoad() {
- load=$(uptime | awk -F 'load average: ' '{print $2}')
- m1=$(echo $load | awk -F ', ' '{print $1}')
- m5=$(echo $load | awk -F ', ' '{print $2}')
- m15=$(echo $load | awk -F ', ' '{print $3}')
- echo "${m1} ${m5} ${m15}"
- m1u=$(echo $m1 | awk -F '.' '{print $1}')
- local remark
- remark=$(GetRemark ${LOAD_REMARK})
- # 检查是否负载是否有压力
- if [ "$remark" = "" ] && [ "$m1u" -gt "2" ]; then
- echo "Subject: ${HOST} Load Average more than 2 $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}
- echo "$(date +%s)" > "$LOAD_REMARK"
- fi
- }
- # 获取上一次发送电邮时间
- function GetRemark() {
- local remark
- if [ -f "$1" ] && [ -s "$1" ]; then
- remark=$(cat $1)
- if [ $(( $NOW - $remark )) -gt "$REMARK_EXPIRE" ]; then
- rm -f $1
- remark=""
- fi
- else
- remark=""
- fi
- echo $remark
- }
- # *** function end ***
- cpuinfo=$(GetCpu)
- meminfo=$(GetMem)
- loadinfo=$(GetLoad)
- echo "cpu: ${cpuinfo}" >> "${CPU_LOG}"
- echo "mem: ${meminfo}" >> "${MEM_LOG}"
- echo "load: ${loadinfo}" >> "${LOAD_LOG}"
- exit 0
crontab
- * * * * * /home/xxxx/ServerMonitor.sh
- * * * * * sleep 30; /home/xxxx/ServerMonitor.sh
- linux load 监控,负载监控 ,shell 监控cpu,memory,load average,记录到log
- shell 监控cpu,memory,load average
- load average监控脚本
- 监控入门-Linux的平均负载(load average)
- 监控入门-Linux的平均负载(load average)
- Linux 监控指标分析- load average
- Linux 性能监控 —— Load Average
- zabbix2.0监控到的cpu load值…
- python 监控linux集群的cpu mem load
- CPU负载计数load average
- Linux load average平均负载
- 关于CPU利用率和Load Average负载
- 关于CPU利用率和Load Average负载
- shell 监控服务器负载
- nagios系列(三)之nagios被动监控模式之添加系统负载load、swap、磁盘iostat及memory内存监控详解
- 系统服务监控指标--load
- linux服务器系统负载监控-shell脚本
- linux服务器系统cpu监控-shell脚本
- JQuery中的AJAX使用
- 屏幕相关辅助工具类
- Jquery pagination分页示例
- 一大波毕业生来袭,应用之星教你用简历App秒杀!
- IDEA 创建基于Maven的spring mvc框架
- linux load 监控,负载监控 ,shell 监控cpu,memory,load average,记录到log
- Github 上的 iOS 开源项目
- 导excel文档中关于数字格式的问题
- android源码修改内核配置不生效的解决办法
- VC与BCB库文件之间的转换问题
- JQuery学习笔记(一)
- runtime - 属性的动态挂载
- SVAC 2.0 解码库——ref_count参数(1)
- 【iOS】返回崩溃:nested pop animation can result in corrupted navigation bar nested pop animation can re