如何快速感知到jvm oom了?

线上有些应用会不定期的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, 故选用第三种方式

你可能感兴趣的:(如何快速感知到jvm oom了?)