2011-05-25 87 views
0

我是剛剛開始探索Grails的新手,因此我可以在我們的工作中推薦這個 偉大框架。雖然學習我想 創建原型應用程序的使用Grails 1.3.7在Ubuntu上,Grails內存問題

,當我運行的應用程序幾分鐘後,我的系統掛起,系統監控 表明,消費量超過的演出記憶。我只運行一個 瀏覽器和終端,甚至沒有netbeans或eclipse。

我以爲這可能是因爲在內存中的hsql分貝,但我配置了 MySQL,甚至然後它的相同的內存問題。我的應用程序是非常簡單的幾種形式,我使用彈簧安全,jms和可搜索的 插件,僅此而已。

我真的很感激任何建議,這將改善內存 問題,否則我將不得不通過這個框架。作爲一名開發人員,我很難過,因爲 這樣的問題,我會錯過這麼好的框架。

我的電腦有2個RAM,只能運行一個chrome瀏覽器和終端。此外,我只有一個控制器,我做了幾個域。

請提供一步一步的指令來提高,因爲我完全陌生的這個

感謝您閱讀

+0

您沒有-Xms意外設置爲較高值?如果沒有其他事情一定要去。雖然Grails的內存要求相當高,但對於非常簡單的應用程序,它的範圍更多在128mb-256mb之間。 – Ruben 2011-05-25 06:17:50

+0

只是想編造一下,我有同樣的問題:當我啓動我的Grails應用程序(少於十幾個控制器和域類,腳手架),但然後做_absolutely nothing_但保持運行,jvisualvm顯示_continuously_攀登堆使用率。注意:我甚至沒有擊中應用程序(沒有請求),只是啓動。 – 2011-11-09 02:59:03

回答

-2

的Grails是一個基於Java的框架建立在Spring之上和Hibernate你要明白,有將成爲一些內存消耗。 尤其在開發模式。更不用說在lucene(可搜索的插件)中發生的所有內存佈線/緩存。演出什麼都不是。購買更多內存。它很便宜。

我的開發機器有8演唱會。我從來沒有比這更少的工作。

請一步一步提供指導 改善,因爲我 全新這個

  1. 找到一個電腦店。
  2. 購買更多內存。
  3. 安裝到您的電腦中。

:O)

1

不知道你做了什麼確切,但我幾乎可以肯定的是,你的東西亂七八糟的應用。我怎麼能確定?好吧,我用2G內存運行Ubuntu 11.04,同時使用STS,Chrome和Firefox。即使我將DB從hsql切換到mySql(這意味着我需要啓動mySql),我沒有問題。我正在處理的應用程序不是用於測試Grails。所以,在你花一些錢之前,我建議你寫一些測試,做一些代碼檢查甚至分析。我敢打賭,你會發現一些很腥的東西,你會得到一些很好的鍛鍊。

+0

代碼是不是所有複雜的東西,我想建立一個Twitter克隆學習語言。並且只有一個用戶正在擊中系統。仍然無法理解內存消耗。如果您能幫助我解決任何可能使用的提示/技巧,除了升級您的RAM之外,我將不勝感激。 – srisris 2011-05-25 07:24:38

0

安裝像JProfiler這樣的剖析器並對應用程序進行剖析。 Ubuntu上的Grails 1.3.7沒有任何問題,我擁有相同的設置,並且在使用大型數據集時沒有問題。

如果您使用的是JMS,請檢查您是否沒有收到任何有毒消息(消息使用失敗,導致消息不斷重新傳遞)。

3

去年,當我將第一個Grails應用程序部署到生產環境時,我遇到了一些Grails問題和高內存使用問題。我的應用程序會執行大量的數據庫選擇,插入,刪除和更新,並且每分鐘執行大約10000個活動會話/用戶。

對於開發,我用1024M HEAP做得很好。然而,當部署到生產內存使用增加很多。我在幾分鐘內得到了OutOfMemory異常。我做的第一件事是將HEAP大小增加到2048M,並且應用程序現在會運行一週,然後再次拋出OutOfMemoryError異常。我還使用了-XX:+ UseConcMarkSweepGC垃圾收集器。

我猜想有一些內存泄漏,但我無法弄清楚。所以我安裝了 Java Melody plugin來監視內存使用情況。我還用JVisualVM找出可以吃掉所有內存的對象類型。

經過幾天的監測,結果發現沒有內存泄漏,但是有一段時間的內存使用率經歷了高峯。目前平均內存使用量約爲1200MB。我再次將HEAP增加到3072M,現在尖峯永遠不會使用比可用的更多的HEAP,但尖峯可能使用高達2800MB的內存。

我的應用程序現在穩定,並且可以運行數月,沒有任何問題。然而,內存使用率仍然很高,我已經在幾個月裏做了一些工作來改善這一點。有兩件事真的有助於減少內存使用量。

第一個很容易,禁用休眠二級緩存。如果您的數據頻繁更改,這被稱爲有用的。對我來說,這也稍微改善了整體表現。這可以在grails-app/conf目錄來完成/ DataSource.conf

cache.use_second_level_cache=false 
cache.use_query_cache=false 

我做的第二件事是調整Searchable plugin。我開始返回一千個點擊,現在最高點擊數是一百個。

這兩個調整減少了75%的峯值。我還做了很多與查詢有關的小調整,特別是減少查詢返回的數據量。 例如,我有一個名爲Issue的域名類有20多個屬性,但是在渲染到視圖時我只需要一些屬性。它可以將結果轉換到地圖是這樣的:

Issue.executeQuery(
    "select new map(i.id as id, i.title as title i.date as date) FROM Issue i" 
) 

調整這樣可以提高查詢時,內存使用情況和整體性能。希望能幫助到你。