2014-09-03 68 views
0

我們在某種程度上使用OpenJPA 2.3.0(在2.2.0之前有相同的問題)連接到WAS環境(8.5)中的DB2數據庫。 我們遇到的問題是,應用程序不斷吃越來越多的內存,直到它最終崩潰。爲什麼我的JDBCBrokerFactory增長

當使用推薦的Memory Analyzer工具時,我們得到一個JDBCBrokerFactory的罪魁禍首。 它有一個ConcurrentHashMap(有16個條目),給定使用數字是對丟失的內存負責。 (最大內存1024M,經過10個小時的靜態但不是太粗糙的加載,這個類負責400M,並且只由MAT指出)

工廠類由環境(org.springframework.orm。 jpa.SharedEntityManagerCreator和com.volvo.jvs.runtime.springutils.SpringContextBootstrapper)對我來說並不令人意外,但我希望這個類不會增長,或者至少在需要時縮小。 (在JPA 2.2.0中有更多的類保留這個類,但仍然沒有「我們」的類)

當然這個類不是我們交互的類之一(OpenJPA實現的內部),它使它很難看到我們在使用JPA時犯錯。

任何想法或提示,我們可以改善,以限制從JDBCBrokerFactory的破壞將非常感激。

/馬丁

回答

0

如果你的代碼存儲在地圖的東西,如果你不想在地圖不斷成長,你最終需要從地圖中刪除項目。

0

在我看來,連接在您的應用程序中沒有正確清理。這就是爲什麼這張地圖無限增長。我建議你正確地手動清理連接,或使用JPA與彈簧的適當集成,因爲彈簧會自行處理它。

+0

我們不手動管理任何連接,對於我們使用JPA的自定義查詢,所以我們沒有任何可以關閉的東西。 希望我們的JPA-xml配置是有序的,我們也不會在這裏做很多花哨的東西。 – 2014-09-04 11:22:04

0

確保您的應用程序正在清理它的EntityManagers。確保在完成使用後關閉EntityManager。

+0

我們只使用注入的EntityManagers,所以我不能將它們視爲不幸的泄漏源。 – 2014-09-04 11:20:06

相關問題