- 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?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
)
je crois que vous avez besoin de citer l'ensemble de l'option, comme ceci:
"-XX:OnOutOfMemoryError=kill -9 %p"
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"
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.
la version single quote devrait fonctionner correctement dans jetty >9.0.4 maintenant.
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?
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"
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... :)
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.
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
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.
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