- XX: OnOutOfMemoryError=" kill -9% P " Problem

j'ai un problème à essayer de passer le -XX:OnOutOfMemoryError="kill -9 %p" commande dans mon jvm arguments.

j'utilise Jetty7, et j'ai ceci au début.fichier ini. Au démarrage il me donner l'erreur ci-dessous. C'est avec jre /jre1.6.0_03l64

Start Jetty: STARTED Jetty Tue Apr 26 09:54: 26 EDT 2011

Option non reconnue: -9

Ne pouvait pas créer la machine virtuelle Java.

Le début.fichier ini est comme dessous.

#===========================================================
# 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

commentaires sur la ligne jetty commencera très bien sans aucun problème. Cependant, nous avons vraiment besoin d'ajouter cet arg en raison de la fuite de mémoire avec le système pour éviter d'autres dommages si notre processus tombe.

<!-Est-ce que quelqu'un aurait une idée de ce que je fais de mal ici ou comment je peux réparer ça?

27
demandé sur skaffman 2011-04-26 18:43:01

12 réponses

Dans la version Java 8u92 la VM arguments

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

ont été ajoutés, voir la notes de mise à jour.

Exitonoutmemoryerror

Lorsque vous activez cette option, la JVM sort du la première occurrence d'une erreur de mémoire insuffisante. Il peut être utilisé si vous préférer redémarrer une instance de L'ECM plutôt que de la gérer à l'extérieur de celle-ci. les erreurs de mémoire.

Crashon OutOfMemoryError

Si cette option est activée, lors d'une une erreur de mémoire se produit, le JVM s'écrase et produit du texte et binaire écrasement des fichiers.

Demande D'Amélioration: JDK-8138745 (le nom du paramètre est erroné bien que JDK-8154713,ExitOnOutOfMemoryError au lieu de ExitOnOutOfMemory)

13
répondu flavio.donze 2016-11-24 16:56:31

je crois que vous avez besoin de citer l'ensemble de l'option, comme ceci:

  "-XX:OnOutOfMemoryError=kill -9 %p"
3
répondu WhiteFang34 2011-04-27 08:37:49

en cours d'Exécution en tant que hadoop option-je exécuter dans à les mêmes problèmes. Ce fut la réponse:

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

Ici stdout est OOM sur:

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

j'ai aussi essayé:

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

Ça a commencé, mais sur OOM

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

mais STDERR a: sh: kill -9 1164: command not found

ceux-ci N'auraient pas même de commencer:

'-XX:OnOutOfMemoryError=kill -9 %p'
"-XX:OnOutOfMemoryError=kill -9 %p"
-XX:OnOutOfMemoryError="kill -9 %p"
3
répondu Jeremy 2013-05-30 16:48:04

j'ai traversé ce problème assez récemment. J'ai résolu en mettant l'option dans le JAVA_TOOL_OPTIONS variable d'environnement. Cette variable est documentée par Oracle et vous devez export cette variable sur les commandes shell et le JVM ajouter des arguments.

3
répondu rscarvalho 2016-10-20 14:11:42

la version single quote devrait fonctionner correctement dans jetty >9.0.4 maintenant.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=408904

2
répondu Thomas Becker 2013-06-10 16:24:28

j'ai trouvé cette option dans un script et je voulais en savoir plus, et google m'a amené ici. Dans le script en question, l'option est

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

ainsi la commande est double quoted, et la valeur de l'option est simple quoted. Ce n'est pas l'une des formes montré dans les autres réponses, donc peut-être qu'il va faire ce que vous voulez?

1
répondu DougC 2013-02-18 17:20:38

Dans le documentation Oracle, OnOutOfMemoryError a la signature:

-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"

notez qu'ici signifie que l'argument doit être demi-côlon séparé, au lieu de séparer l'espace.

Donc, dans l'exemple cité, il devrait être:

-XX:OnOutOfMemoryError="kill;-9;%p"
1
répondu Charles Lin 2018-04-08 14:01:26

j'ai même essayé d'intégrer un espace en utilisant %20 mais cela a été pris au pied de la lettre. Donc, quand il a reçu un OOM, il a échoué en disant que la commande (avec le %20 intégré) ne pouvait pas être trouvée. Fou, je sais, mais valait la peine d'essayer... :)

Peut-être que nous sommes censés utiliser le < et > comme le Soleil docs?! :P je vais essayer... :)

0
répondu Piko 2011-06-14 22:31:25

pourquoi pas au lieu d'invoquer kill, lancez un script shell qui invoque kill avec le pid passé comme argument (vous auriez toujours un espace, mais pas de drapeau -9).

e.g. -XX:OnOutOfMemoryError='/path/killdash9.sh %p'

si vous ne pouvez toujours pas avoir l'espace, essayez peut-être d'avoir le script shell pour trouver le pid associé à cette instance de Jetty? Tout à fait un hack, mais il pourrait fonctionner.

0
répondu spadequack 2011-08-23 20:51:58

dans une version récente de Java 8 (update 92), vous avez maintenant l'option d'utiliser L'option "ExitOnOutOfMemoryError".

http://www.oracle.com/technetwork/java/javase/8u92-relnotes-2949471.html

0
répondu Carl Chesser 2016-06-15 16:51:39

Les ouvrages suivants

java -classpath $CLASSPATH "-XX:OnOutOfMemoryError=touch 'worker.oome'"  $JVM_ARGS $MAIN

la Plupart des réponses ne fonctionnent pas.

cependant.. si vous voulez le mettre par exemple dans la variable $JVM_ARGS vous êtes dans un monde de douleur.

0
répondu pveentjer 2017-03-24 12:30:24

Vous devez utiliser -XX:OnOutOfMemoryError=/bin/kill -9 %p

Aussi, si vous voulez tester les modifications, vous pouvez l'écho d'un message avant de le tuer.

-XX:OnOutOfMemoryError=/bin/date; /bin/echo custom message;/bin/kill -9 %p

0
répondu Himadri Mandal 2018-03-23 20:55:11