Linux如何判断OOM

     2015年02月03日       江南兔子哥       运维笔记->系统管理       linux oom 

OOM之怕

OOM(Out of Memory)的机器僵而不死,对应用来说是最大的伤害,所以我们需要有一种有效的监控手段来判断机器是否是OOM。

OOM机器的特征

  • 机器能否ping通
  • 机器无法ssh,但是能telnet 22端口,却无法ssh上去

OOM时机器状态的猜测

  • Linux的kernel可能还是活的,至少tcp/ip协议栈还是可以工作的,因为ip还能ping通,22端口依然在监听
  • 上层应用都不响应了,比如telnet 22端口能连接上,但输入任何字符后无响应

OOM监控脚本

#/bin/bash
ips='
192.168.1.1
192.168.1.2
192.168.1.3
'
for i in $ips
do
    #判断是否能ping通
    if ping -c2 -w5 $i 2>/dev/null ; then
        #用nc判断22端口是否能否响应,使用nc -w参数设定nc 超时时间
        if echo 'hello' | nc -w 10 $i 22 | grep -q 'OpenSSH' ; then
            echo "$ip is OK"
        else
            echo "$ip is OOM!"
        fi
    fi
done