Попытка вызвать исключение нехватки памяти у почтальона - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь протестировать простой скрипт, который убьет и перезапустит службу, если она обнаружит ошибку нехватки памяти. Сам сервис выполняет полные операции CRUD и вызывает скрипт в опциях JVM, определенных в его стартовом скрипте.

В скрипте start.sh:

DEFAULT_JVM_OPTS='"-Xmx512m" "-Dapp.name=app-service" "-XX:OnOutOfMemoryError=./oom.sh" "-Dspring.profiles.active='"$1"'"'

exec nohup "$JAVACMD" $DEFAULT_JVM_OPTS -jar $CLASSPATH > stdout.out 2> stderr.err &

А в ом.ш

#!/usr/bin/env sh

kill %p;

echo "service out of memory"
sleep 5
echo "Restarting service"

./start.sh profileName

Моя самая большая проблема сейчас - на самом деле тестирование скрипта, вызывая ошибку OOM. Теоретически, случится так, что будет вызван скрипт oom.sh, который убьет, а затем перезапустит службу. Я пытался использовать Postman Runner, чтобы отправить 500, чтобы получить все запросы, но не повезло. Кто-нибудь знает лучший способ сделать это?

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

Это быстро создает исключение нехватки памяти:

String s = "x";
while (s.length() > 0) {
  s += s;
}
0 голосов
/ 11 июля 2019

Вот пример вызова OutOfMemoryError с помощью простой программы: https://crunchify.com/how-to-generate-out-of-memory-oom-in-java-programatically/

Программа использует больше памяти с каждым циклом.

Как указано в комментарии, вы также можете просто выдать ошибку OutOfMemoryError для тестирования:

throw new java.lang.OutOfMemoryError();
0 голосов
/ 10 июля 2019

Будет ли работать Java Service Wrapper?Он разработан для обработки различных сценариев, в которых должно работать ваше приложение, но по какой-то причине этого не происходит (включая нехватку памяти).Это тоже закаленное в боях тоже.https://wrapper.tanukisoftware.com

У вас могут быть конкретные причины / требования против использования чего-либо вроде Wrapper, но стоит посмотреть, если вы этого еще не сделали.

...