Справочная информация:
Мы пытаемся загрузить данные в наше Custom CorDapp (Corda-3.1), используя jmeter.
Наш CorDapp распределен по шести узлам (три стороны, два нотариуса и один Oracle).
Поток, выполняемый для загрузки данных, имеет очень минимальную бизнес-логику, имеет трех участников и требует, чтобы две стороны подписали транзакцию.
Ниже приведены сведения о среде, конфигурации и тестировании:
Сервер: Ubuntu 16.04
Ram: 8 ГБ
Выделение памяти для Corda.jar: 4 ГБ
Выделение памяти для Corda-webserver.jar: 1 ГБ
Конфигурация JMeter - потоки (пользователи): 20 (1 транзакция в секунду на поток)
Результат:
Узел B аварийно завершился после примерно 21000 успешных транзакций (примерно за 3 часа и 30 минут) с сообщением "java.lang.OutOfMemoryError: Java heap space". Через некоторое время другие узлы перестали работать из-за постоянной «ошибки рукопожатия» с узлом B.
Мы проанализировали дамп кучи с помощью Eclipse MAT и обнаружили, что было создано более 21000 экземпляров hibernate SessionFactoryImpl, которые занимали более 85% памяти на узле B.
Нам нужно понять, почему сеть Corda создает так много объектов и сохраняет их в памяти.
Мы продолжаем наше расследование, так как не уверены на 100%, является ли это ошибкой Corda.
Решение этой проблемы имеет решающее значение для продолжения дальнейших испытаний.
Примечание. У нас есть более подробная информация о нашем расследовании, но мы не можем прикрепить их здесь, но можем отправить по электронной почте.