2014-01-10 31 views
6

我最近將HQLDB從1.8遷移到了2.x,之後我的集成(內存)測試開始使用太多的內存。將內存增加到6GB可以使測試速度更快,但仍然會在某些時候凍結。從HSQL DB 1.8遷移到2.x內存問題

我有屬性shutdown = true;對url參數添加hsqldb.write_delay = false不會有任何區別。

升級之前它沒有任何問題。我在遷移指南中找不到任何提示http://hsqldb.org/web/hsqlFAQ.html

+0

如果您升級了HSQLDB版本以外的其他內容,您可以回傳更改的內容嗎?還讓我們知道數據集的大小,是否有很多數據? –

+0

@jhadesdev沒有升級,只用2.3.1替換了hsql 1.8。問題是新的hsql確實有刪除表的內存問題現在我刪除表並重新創建數據庫的問題消失。 – 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關於內存泄漏出現了bug修復,請參閱變更表因爲 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,並有相同的結果。使用幾乎3GB的內存和1.8沒有問題,最大500MB的內存使用量。我正在做內存測試而不是基於磁盤或服務器。我有VisualVM並一直在監視線程加載這麼多的類,而不是從內存中刪除。仍然找不到解決方案。歡呼聲 – Pinchy