jvm -XX:OnOutOfMemoryError参数无效

问题遇到的现象和发生背景

用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参数;我试了多线程的情况就会执行该参数后面的脚本了。