-XX: OnOutOfMemoryError = "kill -9% p" Проблема - PullRequest
29 голосов
/ 26 апреля 2011

У меня проблема с попыткой передать команду -XX:OnOutOfMemoryError="kill -9 %p" в мои аргументы jvm.

Я использую Jetty7, и это в файле start.ini. При запуске это даст мне ошибку ниже. Это с jre /jre1.6.0_03l64

Стартовая пристань Нераспознанная опция: -9
Не удалось создать виртуальную машину Java.

Файл start.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

Комментируя причал, все начнется нормально, без проблем. Однако нам действительно нужно добавить этот аргумент из-за утечки памяти в системе, чтобы предотвратить дальнейшее повреждение в случае сбоя нашего процесса.

Кто-нибудь может понять, что я делаю здесь неправильно или как я могу это исправить?

Ответы [ 13 ]

0 голосов
/ 15 июня 2016

В недавнем выпуске Java 8 (обновление 92) теперь у вас есть возможность использовать опцию «ExitOnOutOfMemoryError».

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

0 голосов
/ 24 августа 2011

Как вместо того, чтобы вызывать kill, запустить скрипт оболочки, который вызывает kill с pid, переданным в качестве аргумента (у вас все равно будет пробел, но без флага -9).

например. -XX:OnOutOfMemoryError='/path/killdash9.sh %p'

Если вам все еще не хватает места, возможно, попробуйте сценарий оболочки найти pid, связанный с этим экземпляром Jetty? Довольно взломать, но это может сработать.

0 голосов
/ 15 июня 2011

Я даже пытался внедрить пробел, используя% 20, но это было воспринято буквально.Поэтому, когда он получил OOM, он не смог сказать, что команда (со встроенным% 20) не может быть найдена.Сумасшедший, я знаю, но попытка стоила ...: P попробую ...:)

...