产品在生产环境中跑了一段时间后,每天早晨运维人员都会发现程序崩溃,无法提供服务,重启之后就好了,而且白天都没问题,运维人员因此叫苦连天。
查看日志发现有堆内存溢出的提示,并且都是发生在凌晨一点钟左右,但找不到是哪个线程导致的,重启之后通过jstack、jmap、jstat等命令查看各项指标都正常。无奈只能在catalina.sh
配置文件中加入JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/.../oom.hprof"
配置项,当程序因为内存溢出崩溃时能够查看当时的jvm内存使用情况。