用Java -XX:OnOutOfMemoryError:对应脚本 这个参数时,参数无效,并不会执行其后的脚本
nohup java -XX:OnOutOfMemoryError=/opt/restart.sh -jar -server -Xms512m -Xmx512m /opt/XXX.jar >/opt/nohup.out 2>&1 &
nohup可以看到如下报错,对应jar文件是我故意写的OOM报错程序
Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:694)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
at oom.main(oom.java:15)
尝试过把-XX:OnOutOfMemoryError放到前后都无效;补充一点:用的jdk是jdk1.8.0_192
是否是因为程序已经退出,而退出的优先级高于OnOutOfMemoryError这个参数的执行顺序
试试这个
nohup java -Dspring.profiles.active=220 -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=19402,suspend=n -Dserver.port=9402 -jar -Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M user-dev.jar >>nohup.out 2>&1 &
-Dspring.profiles.active=220 指运行的环境比如 dev,test等,我这里220 user-dev.jar这里是包 其他端口号自行修改
已经测试,我写的OOM的例子太过简单是单线程例子,所以出现oom问题时自动退出,退出的优先级高于OnOutOfMemoryError参数;我试了多线程的情况就会执行该参数后面的脚本了。