{"title": "Linux\u5982\u4f55\u5224\u65adOOM", "update_time": "2015-02-03 10:52:58", "tags": "oom linux", "pid": "271", "icon": "linux.png"}
## 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 ```