PermGen Space при запуске TestSuite из GUI

Здравствуйте, столкнулся с такой штукой: при запуске набора (testSuite) из интерфейса программы, иногда начали отваливаться тесты. Раньше работающие корректно. Причем из командной строки эти тесты все отработали. И ранее они часто отрабатывали нормально. Каждый в отдельности работает. Но после того как GUI завис, то все assert’ы указывают на null и надо процесс убивать через диспетчер и запускать приложение заново.

Почитал, вот тут на их сайте:
http://www.soapui.org/working-with-soapui/improving-memory-usage.html

Не пробовал менять еще, но думаю в чем еще может быть проблема. Может где-то открыто и не закрыто много коннектов, не удаляются объекты и т.д.? Они вообще как очищаются? Как можно это дело профилировать и грамотно контролировать? Хочу оптимизировать тесты, пока их число не разрослось и потом уже писать более “аккуратно”. Вообще какие “требования” к железу у SoapUI? У меня не самая мощная машинка и Windows 7 32-бит. Стоит ли просить апгрейд на х64 и наращивание памяти для работы с SoapUI? Судя по Диспетчеру Задач SoapUI отжирает чуть более 1 Gb памяти, всего ее не более 3 (в тачке вроде бы 4, но система не адресует более 3х Gb).

Контролировать использование памяти джава-машиной (JVM) можно с помощью jconsole или VisualVM, входящих в состав JDK (насколько помню, в составе JRE их нет).

По использованию памяти в SoapUI не подскажу, лучше читать их рекомендации, но увеличение размеров памяти для JVM и изменение конфигурации “поколений” хранимых в памяти объектов (в т.ч. PermGen) не является чем-то из ряда вон выходящим. Главное знать что делаешь :smile:

В частности нехватка PermGen, если я правильно помню, означает, что слишком много объектов необходимо хранить постоянно, то есть GC не чистит их по причине их востребованности. Рассуждая логически, можно предположить, например, такие причины:

  • либо слишком много тестов запускается параллельно
  • либо при последовательном запуске SoapUI не корректно освобождает память, выделенную под уже отработавшие тесты. Возможно, он открывает под каждый тест новое окно
  • либо последующие тесты используют результаты предыдущих

В общем, это предмет для исследования, гадать можно долго.
При запуске из консоли проблема не проявляется вероятно потому, что не расходуется память по GUI

1 лайк

Предназначение PermGen я всё-таки помню неправильно :smile: В нём хранятся определения используемых в приложении классов. Соответственно, он забивается тем больше, чем больше различных библиотек используется, чем больше разных классов используется и т.д.

В любом случае, если есть необходимость в оптимизации, надо со всем этим начинать разбираться

Благодарю! Буду копать в эту сторону.

Тесты по идее не связаны. Каждый берет свои данные и хранит внутри себя (есть только общие параметры для всего проекта: имена очередей, параметры подключения к БД и т.п.). Тесты относительно простые: формирование XML (данные из БД), отправка в MQ очередь, получение ответа из другой очереди, парсинг ответа и сравнение с ожидаемыми данными (в assert’ах для различных полей) + запросы в базу (тоже в Assertions’e).

Все коннекты к Бд закрываю: sql.close();

Думаю, что просто при запуске TestSuite SoapUI по какой-то причине хранит все в памяти и не очищает временные значения при запуске следующего TestCase.

Есть идеи как освобождать ресурсы вручную? Или как убедиться, что они при запуске из GUI всего набора не освобождаются и какие именно остаются в памяти после отработки TestCase’а?

Идей нет, но вроде никак - это внутренняя кухня JVM

Мониторинг JVM с помощью jconsole или VisualVM

2 лайка

Благодарю! Буду разбираться. Если найду ответ, постараюсь тут отписаться.

У меня такая ошибка, часто возникала при использовании Allure.

Нет, я Allure не использую. Слышал про него. Но прикручивать к SoapUI не пробовал. Есть в этом какой-то плюс? Что дает использование Allure? Я пока просто в log.info вывожу информацию, а потом он складывается в Jazz через адаптер. Для отчета достаточно Passed для пройденных тестов. Для разбора проблем - текстового лога. Есть идея, что из-за излишнего логгирования тоже может быть проблема. По первости много всего пихал туда и еще не почистил те тесты от мусора.

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

Необходимо поставить в .vmoptions файле SoapUI использовать больше памяти.
Я с таким сталкивался, когда было слишком много тестов (>1000) в одном SoapUI проекте.
Почитайте здесь: