2012-05-01 64 views
4

我部署了一個我創建的Grails應用程序(我製作的第一個應用程序),啓動時內存使用量約爲2 GB。 (Tomcat 6)Grails - 啓動內存/內存使用情況/域對象

該應用程序在4種類型之間維護大約133,000個域對象。大多數到DB的事務都是通過大約115,000個這些對象和正常的CRUD操作/文件導入和導出進行搜索。

經過多次使用後,我發現我的內存標記是3.3 GB。

首先 - 爲什麼啓動時內存使用量如此之高? Grails是否默認緩存內存中的域對象使用情況?

第二 - 我已經在應用程序的許多點處理了GORM清理,但內存使用率仍然很高(3.3GB)。 ORM層中是否存在導致事務緩存等問題?

感謝


--------------- 編輯 --------------------

測試:我刪除從數據庫中

啓動所有的域對象:514 MB

隨着對象:993 MB(我修剪基於數據源文件中的一些性能)


**數據源**

dataSource { 
pooled = true 
driverClassName = "com.mysql.jdbc.Driver" 
username = "xxx" 
password = "xxx" 
} 
hibernate { 
cache.use_second_level_cache = false 
cache.use_query_cache = true 
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' 
} 
// environment specific settings 
environments { 
development { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://localhost/mydb" 
    } 
} 
test { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://localhost/mydb" 
    } 
} 
production { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://localhost/mydb" 
    } 
} 
} 
+1

所以你的域對象是平均3.7 KB?這很棒,很多。 –

+0

對象包含大量數據(其中115,000個對象每個都有大約17個屬性)。這可能是一個設計問題,但我看不到一種方法來提取特定於域的屬性。 – user82302124

回答

2

Grails是內存豬。

您使用的是hsqldb還是mysql後端數據庫?

如果您使用的是默認hsqlbd,我的猜測是它的Hsqldb默認設置導致了問題。

我建議將它添加到您的DataSource.groovy的

url = "jdbc:hsqldb:file:" + location + "/prodDb_v02;hsqldb.default_table_type=cached;shutdown=true" 

第一部分JDBC:HSQLDB:文件:.....只是設置的位置數據庫

重要部分是hsqldb.default_table_type =緩存;

這將默認類型從內存更改爲緩存。

好寫了這條這裏...

http://www.jroller.com/alessiopace/entry/hsqldb_memory_and_cached_tables

+0

使用MySql。我將拋出我的DataSource文件內容。現在閱讀這個鏈接,只需發起一些事情就會很有用(即使它是HSQL)。 – user82302124

+0

所以我沒有做任何與MySql和grails ..但已與大型域表。我覺得有些東西還活在記憶中。 –

+0

我的建議是使用java visual vm並監視應用程序的內存佔用情況,以查看它出現的位置 –

2

你使用二級緩存查詢緩存,以便將解釋一些你的內存使用情況。

除此之外,很難盲目猜測爲什麼使用這麼多內存。這可能是一些事情,所以,在你開始翻轉開關和逐步測試之前,我會推薦使用諸如JavaMelodyEhcache monitor之類的東西。這將幫助您瞭解幕布背後發生的情況以及您所做的更改的影響。

的Grails會消耗比一些可比框架但性能的問題,像這些通常是由代碼庫配置導致更多的存儲器。另外,您可能希望在某些可能有所幫助的JVM選項上看看here

祝你好運。

+0

「Grails比一些可比較的框架消耗更多的內存」,請定義「可比較的框架」。我對Rails,Django和Grails之間的資源消耗進行了一些比較,Grails消耗了將近10倍的內存,然後其他的消耗了空白頁面...... – Kedare