2012-11-13 50 views
10

正在做一些拉伸(ab)測試我的1 heroku dyno和dev連接數限制20個數據庫。Heroku內存泄漏與Play2斯卡拉

在調用(即訪問數據庫squeryl堆分配增加導致R14(內存512MB以上))

我似乎無法重現該問題(在那個水平至少局部)。

有沒有辦法讓heroku堆轉儲和分析它獲得一些線索?

play2,scala,squeryl和heroku內存泄漏是否有任何已知問題?

更新

如果我在控制一切的結束做的System.gc似乎是精細和更慢的OFC ......我那個電話創造了大量的對象,但不應該Heroku的JVM取關心gc?另外,如果我安排GC調用定期不要隨意存儲

+0

你使用Streaming(return chunks)嗎? – Schleichardt

+0

不,我不知道。如果我在控制器的末端執行System.gc,那麼一切似乎都很好,而且速度較慢......我在那個調用中創建了很多對象,但是不應該使用Hermus JVM來處理gc?此外,如果我安排gc電話定期不要釋放內存.. – weakwire

+0

您是否在'Procfile'中使用默認'JAVA_OPTS'? –

回答

5

有用於解決內存問題的一個偉大的文章在Heroku: https://devcenter.heroku.com/articles/java-memory-issues

在你的情況,你可以在GC標誌添加到JAVA_OPTS看到內存的詳細信息。我建議以下標誌:

heroku config:add JAVA_OPTS="-Xmx384m -Xss512k -XX:+UseCompressedOops -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps"

還有一個簡單的Java代理,如果你想從JMX關於你的記憶一點點更多信息,你可以添加到您的過程。你也可以看看像New Relic這樣的監控插件,如果你想更深入的瞭解,但是我認爲你應該對flags和java代理來說很好。

0

我也有這個問題,並回答了它here

我有同樣的問題。 Heroku告訴你機器內存耗盡 ,而不是Java VM。 Heroku Play 2.2部署中實際存在一個錯誤,啓動腳本讀取java_opts,而不是JAVA_OPTS。

我固定它通過設置兩個:

heroku config:add java_opts='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops' 
heroku config:add JAVA_OPTS='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops' 

我也不得不設置-Xms否則我得到了一個錯誤說的最小值和最大值 是不相容的。我猜Play2.2使用的默認高於 384米。

+0

FYI。這不再是一個問題。部署了一個播放2.3應用程序,它拿起JAVA_OPTS罰款。 –