2014-01-10 2 views
6

Недавно я перенес HQLDB с 1,8 до 2.x, после чего мой тест интеграции (в памяти) начал использовать слишком много памяти. Увеличение памяти до 6 ГБ делает тест быстрее, но в какой-то момент удается заморозить.Миграция из проблемы с HSQL DB 1.8 до 2.x

У меня есть свойства shutdown = true; при добавлении параметров url hsqldb.write_delay = false не будет иметь никакого значения.

Перед обновлением он работал без проблем. Я не могу найти никаких подсказок в руководстве по миграции. http://hsqldb.org/web/hsqlFAQ.html

+0

Если вы обновили другие вещи, отличные от версии HSQLDB, можете ли вы отправить обратно то, что было изменено?Также дайте нам знать размер наборов данных, много ли данных? –

+0

@jhadesdev Ничего не обновлено, только заменил hsql 1.8 на 2.3.1, вот и все. Проблема была новая hsql имеет проблему памяти с удалением таблиц, теперь я отбрасываю таблицы и воссоздаю db, проблема исчезла. – Pinchy

ответ

2

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

Самый простой способ гарантировать, что все таблицы и их данные в схеме выделяется такой:

DROP SCHEMA schemaname CASCADE 

или альтернативно ОТКЛЮЧЕНИЯ базы данных после серии тестов:

SHUTDOWN 

ыполните выше операторов с именем вашей схемы после завершения некоторых тестов для выпуска всех данных.

Главное, что изменилось с версии 1.8.0, - это поддержка транзакций. Hibernate рассматривает новые версии по-разному. Поэтому вам нужно проверить, остается ли какое-либо соединение открытым или нет, поэтому SHUTDOWN выполняется, когда последнее соединение закрыто.

+0

Проблема заключалась в том, что таблицы базы данных были удалены с помощью DELETE FROM TABLE, я заменил его на таблицы отбрасывания и воссоздал их, он решил проблему с памятью. – Pinchy

3

Если вы только изменили версию HSQLDB и начали давать проблемы с памятью, то это ошибка утечки памяти.

Обновление до HSQLDB версии 2.3.1, так как были исправлены ошибки после 2.0 относительно утечек памяти см список изменений так 2,0 here, один из исправлений ошибок говорит:

исправлена ​​ошибка приводит к снижению скорости и утечка памяти с диска на основе наборов результатов

уменьшить потребление памяти, используя HSQLDB:

Создания таблиц с помощью этого синтаксиса позволит сократить потребление памяти наверняка, так как эта таблица существует на диск, и только часть из них загружается в памяти:

CREATE CACHED TABLE YOUR_TABLE_NAME 

Подтверждения, что HSQLDB проблема :

Вы всегда можете использовать профиль памяти, чтобы подтвердить причину высокого потребления памяти, используя Visual VM. Это инструмент, который уже установлен вместе с JDK и может запускаться через командную строку с помощью команды jvisualvm.

Проверьте это 6 minutes tutorial video, чтобы узнать, как он может помочь устранить проблемы с памятью.

+0

Спасибо за ответ. Я тестировал свое приложение со всеми версиями от 2.0 до 2.3.1 и имел тот же результат. Использование почти 3 ГБ памяти с 1,8 без проблем. Максимальное использование памяти 500 МБ. Я делаю в тесте памяти, а не на диске или сервере. У меня есть VisualVM и отслеживаю потоки, поэтому многие классы загружаются и не удаляются из памяти. Все еще не удается найти решение. Cheers – Pinchy

Смежные вопросы