-XX:OnOutOfMemoryError=“kill -9 %p” 问题

2022-09-01 10:43:17

我在尝试将命令传递到我的jvm args时遇到问题。-XX:OnOutOfMemoryError="kill -9 %p"

我正在使用Jetty7,并在开始.ini文件中有这个。启动时,它会给我以下错误。这是与 jre /jre1.6.0_03l64

开始 Jetty: Started Jetty 星期二 4 月 26 09:54:26 EDT 2011
无法识别的选项: -9
无法创建 Java 虚拟机。

开始.ini文件如下所示。

#===========================================================
# If the arguements in this file include JVM arguments
# (eg -Xmx512m) or JVM System properties (eg com.sun.???),
# then these will not take affect unless the --exec
# parameter is included or if the output from --dry-run
# is executed like:
#   eval $(java -jar start.jar --dry-run)
#
# Below are some recommended options for Sun's JRE
#-----------------------------------------------------------
  --exec
# -Dcom.sun.management.jmxremote
  -Xmx4096m
  -Xmn512m
  -DLABEL=PROD_APP
  -verbose:gc
  -Xloggc:/export/opt/prod_app/logs/gc.log
  -XX:OnOutOfMemoryError="kill -9 %p"
# -XX:+PrintGCDateStamps
  -XX:+PrintGCTimeStamps
  -XX:+PrintGCDetails
  -XX:+PrintTenuringDistribution
# -XX:+PrintCommandLineFlags
# -XX:+DisableExplicitGC
# -XX:+UseConcMarkSweepGC
# -XX:ParallelCMSThreads=2
# -XX:+CMSClassUnloadingEnabled
# -XX:+UseCMSCompactAtFullCollection
# -XX:CMSInitiatingOccupancyFraction=80

注释码头的线路将开始没有问题。但是,由于系统内存泄漏,我们确实需要添加此参数,以防止在我们的进程失败时进一步损坏。

有谁知道我在这里做错了什么,或者我该如何解决这个问题?


答案 1

在 Java 版本 8u92 中,VM 参数

  • -XX:+ExitOnOutOfMemoryError
  • -XX:+CrashOnOutOfMemoryError

已添加,请参阅发行说明

ExitOnOutOfMemoror
如果启用此选项,JVM 将在第一次出现内存不足错误时退出。如果您更喜欢重新启动 JVM 实例而不是处理内存不足错误,则可以使用它。

CrashOnOutOfMemoror 如果
启用此选项,当发生内存不足错误时,JVM 会崩溃并生成文本和二进制崩溃文件。

增强请求:JDK-8138745(参数命名错误,尽管 JDK-8154713,而不是ExitOnOutOfMemoryErrorExitOnOutOfMemory)


答案 2

作为hadoop选项运行,我遇到了同样的问题。答案是这样的:

-XX:OnOutOfMemoryError='kill -9 %p'

以下是 OOM 上的标准输出:

#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
#   Executing /bin/sh -c "kill -9 11902"...

我还尝试了:

-XX:OnOutOfMemoryError='"kill -9 %p"'

它开始了,但在OOM上它

# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill' '-9' '%p"
#   Executing /bin/sh -c "kill' '-9' '1164"...

但 STDERR 有: sh: kill -9 1164: 命令未找到

这些甚至不会开始:

'-XX:OnOutOfMemoryError=kill -9 %p'
"-XX:OnOutOfMemoryError=kill -9 %p"
-XX:OnOutOfMemoryError="kill -9 %p"

推荐