线上有些应用会不定期的oom,当出现jvm oom, 应用有可能挂掉,也可能不会挂掉,主要看
jvm中是否还有非守护线程,出现jvm oom时,线上应用部分功能正常,部分功能不正常,
如何能做到快速让业务方感知到jvm oom, 快速干预oom呢?
1、监控OutOfMemoryError打印的堆栈日志
2、配置-XX:OnOutOfMemoryError="kill -9 %p", 让jvm 主动kill 掉,可以通过一些进程监控,或者流量监控的功能发现进程挂掉了
3、不kill进程,只是发送个报警信息,-XX:OnOutOfMemoryError="sh oom.sh %p"
#!/bin/sh
#set -e
#set -x
pid=$1
appName=$(jinfo -sysprops $pid|grep app.name|awk -F" = " '{print $2}')
ip=`hostname -i`
curl --connect-timeout 1 -m 3 -s -o /dev/null http://监控域名/api/oom_alarm?ip=$ip\&pid=$pid\&appName=$appName
因为线上有些应用是单机部署的,不想主动kill, 故选用第三种方式
网友评论