2012-11-13 10 views
10

War etwas Stretch (AB) Test zu meinem 1 Heroku Dyno und Dev-Datenbank mit 20 Verbindungen Grenze.Heroku Speicherleck mit Play2 Scala

Während die Anrufe (die Access-Datenbank mit der squeryl Heapzuordnung steigt R14 verursacht (Speicher mehr als 512 MB))

ich das Problem nicht scheinen, zu reproduzieren (auf dass zumindest lokal Stufen).

Gibt es eine Möglichkeit, Heroku-Heap-Dump zu erhalten und zu analysieren, um einen Hinweis zu bekommen?

Gibt es bekannte Probleme mit play2, scala, squeryl und heroku memory leak?

aktualisieren

Wenn ich System.gc am Ende der Steuerung alles tun, scheint in Ordnung und langsamer OFC zu sein ... Ich schaffe bei diesem Anruf eine Menge Objekt, sondern sollte Heroku JVM nehmen nicht Pflege von GC? kostenlos auch wenn ich gc Anruf plane regelmäßig nicht Speicher

+0

Verwenden Sie Streaming (Return-Chunks)? – Schleichardt

+0

Nein, ich nicht. Wenn ich System.gc am Ende des Controllers mache, scheint alles in Ordnung zu sein und langsamer von ... Ich erstelle eine Menge Objekte bei diesem Aufruf, aber sollte sich nicht Herokus JVM um GC kümmern? Auch, wenn ich plane GC-Aufruf regelmäßig Speicher nicht frei .. – weakwire

+0

Verwenden Sie die Standard-'JAVA_OPTS' in der' Procfile'? –

Antwort

5

Es gibt einen großen Artikel für die Fehlerbehebung Speicherprobleme auf Heroku: https://devcenter.heroku.com/articles/java-memory-issues

In Ihrem Fall können Sie die GC-Flags zu JAVA_OPTS in dem Speicher zu sehen. Ich würde die folgenden Flags vorschlagen:

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

Es gibt auch eine einfache Java-Agenten, den Sie zu Ihrem Prozess hinzufügen können, wenn Sie ein wenig mehr Informationen von JMX über Ihr Gedächtnis wollen. Sie können auch Addons wie New Relic beobachten, wenn Sie tiefer in die Tiefe gehen wollen, aber ich denke, mit den Flags und dem Java-Agent sollte es Ihnen gut gehen.

0

Ich hatte dieses Problem auch und beantwortete es here.

Ich hatte das gleiche Problem. Heroku sagt Ihnen, dass die Maschine des Speichers ausgeht, nicht die Java VM. Es gibt tatsächlich einen Fehler in der Herod 2.2.0-Implementierung, das Startskript liest java_opts, nicht JAVA_OPTS.

ich es fest sowohl durch Einstellung:

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

Ich musste auch -Xms gesetzt sonst bekam ich einen Fehler des min sagen und max waren unvereinbar. Ich nehme an, Play2.2 verwendet einen Standardwert höher als 384m.

+0

FYI. Das ist kein Problem mehr. Bereitstellung einer Play 2.3 App und es hat JAVA_OPTS in Ordnung gebracht. –