мы используем пригодность для приемочного тестирования сложного веб-приложения. полный набор займет несколько часов, поэтому мы используем несколько процессов. установка следующая:
- maven forks серверный процесс фитнеса
- maven делает http-вызовы на фитнес-сервер
- фитнес-сервер разветвляет тестовый бегун для каждого вызова
- HTTP-вызов возвращается, вернитесь к 2.
командная строка для запуска jvm в 3. встроена в банку для фитнеса на основе параметров HTTP-вызова. это означает, что вы не можете передать произвольный аргумент jvm, только те, которые поддерживаются.
теперь проблема, с которой мы сталкиваемся, заключается в том, что иногда процесс запускался через 3 зависания. это не похоже на проблему тайм-аута, потому что мы видели, как они зависали в течение нескольких часов.
эти процессы jvm ничего не раскрывают через jmx, поэтому мы не можем подключиться к ним с помощью jconsole или аналогичного. исходя из объема памяти, который потребляет каждый процесс (1-1,5 ГБ), я сильно подозреваю, что OOM происходит где-то в процессе запуска и не позволяет ему нормально завершиться. Кроме того, попытка "убить -3" на серверном процессе приводит к
Exception in thread "CommandRunner stdOut" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332)
в том, что кажется стандартным выводом из запущенного процесса бегуна, но я не уверен.
решение, о котором я сейчас думаю, - это создание моих копий классов, которые управляют командной строкой, чтобы каждый процесс запускался со случайным портом jmx и портом отладки, поэтому, если он зависает, можно подключиться и исследовать.
Итак, вопрос в том, есть ли лучший способ сделать это? я пропустил что-то очевидное здесь?