Corda Node получает исключение JVM OutOfMemory при попытке загрузить данные - PullRequest
0 голосов
/ 08 мая 2018

Справочная информация:
Мы пытаемся загрузить данные в наше 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.
Решение этой проблемы имеет решающее значение для продолжения дальнейших испытаний.
Примечание. У нас есть более подробная информация о нашем расследовании, но мы не можем прикрепить их здесь, но можем отправить по электронной почте.

1 Ответ

0 голосов
/ 08 мая 2018

Если вы разрабатываете на Java, вполне вероятно, что проблема, с которой вы столкнулись, уже была исправлена ​​https://r3 -cev.atlassian.net / browse / CORDA-1411

Исправление еще не доступно в Corda 3.1, но билет JIRA предоставляет обходной путь. Вам нужно переопределить equals и hashCode для любых подклассов MappedSchema, которые вы определили. Это должно исправить проблему, которую вы наблюдаете.

...