Warum erhalte ich Speicherkontingente, die auf Heroku überschritten wurden, auch wenn sie nicht verwendet wurden? (play2 / scala)

8

Ich sitze nur ohne Anfragen, ich bekomme immer mehr Speicher, irgendwann wird das Speicherkontingent überschritten. Es gibt mehrere Dinge, die ich nicht verstehe.

  1. Warum die Speicherbelegung steigt, wenn keine Anfragen eingehen?
  2. Woher kommt der Wert von "Process running mem" (scheint keine Summe irgendeiner Kombination von Zahlen aus der Heap- und Non-Heap-Nutzung zu sein, die ich sagen kann).
  3. Warum überschreitet es, obwohl ich die empfohlene JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -javaagent:heroku-javaagent-1.2.jar=stdout=true habe?

Hier ist ein Beispiel der Protokolldatei

%Vor%     
Dax Fohl 03.04.2013, 23:26
quelle

4 Antworten

5

Dieses Problem sollte nicht spezifisch für Heroku sein und sollte (im Idealfall) lokal reproduziert werden können. Zunächst würde ich empfehlen, Ihre App lokal auf die gleiche Weise auszuführen, wie Heroku sie ausführt:

Dann würde ich einen Speicherprofiler wie VisualVM verwenden, um ihn an Ihre lokal laufende App anzuhängen, um zu sehen, was passiert.

Wenn dies nicht funktioniert oder Sie eine bessere Aufteilung der Speicherbelegung auf Heroku erhalten möchten, empfehle ich die Aktivierung von Protokoll-Laufzeitmetriken . Dies kann auch mit Log2Viz verwendet werden, um eine Echtzeit-Speicher-Visualisierung zu erhalten.

    
ryanbrainard 09.04.2013 17:38
quelle
2

hatte gerade ein ähnliches Problem. Ich konnte das Problem nicht lokal reproduzieren. Es stellte sich heraus, dass wir in unserer Protokollierungskonfiguration einen Dateiappender hatten. Das Schreiben in die Logs ließ das Gedächtnis wachsen. Sie können das überprüfen, indem Sie eine kleine App schreiben, die viel protokolliert. Wenn Sie die Protokoll-Laufzeitmetrik aktivieren, sehen Sie, dass memory_cache und memory_total wachsen.

    
Ralf Bokelberg 17.09.2014 10:41
quelle
0

Aktivieren Sie log-runtime-metrics in heroku:

%Vor%

Damit können Sie die Speichernutzung in den Protokollen anzeigen

%Vor%

Ссылка

    
Skeep 07.11.2013 16:56
quelle
0

Ich habe die gleiche Fehlermeldung in Grails-Anwendung, ich lese dies Artikel die Lösung war einfach erstellen Sie eine system.property -Datei im Stammordner mit diesem java.runtime.version = 1.7 als Inhalt Ich deploy die Anwendung und Fehler R14 ist weg

Ich hoffe, es ist hilfreich

    
user615274 03.06.2014 15:32
quelle

Tags und Links