2016-04-26 7 views
1

Meine Anwendung ruft mehrere APIs auf, die viele Daten zurückgeben, die in meinem Controller manipuliert werden, um verschiedene Einblicke zu geben (die an meine Ansicht weitergegeben wurden).Speicherlecks in meiner Ruby on Rails-Anwendung

Das Problem ist, dass ich Speicherlecks in meiner Anwendung habe, für die ich derzeit meine Anwendung nach wenigen Anfragen neu starten muss.

Außerdem habe ich alle meine API-Aufrufe zwischengespeichert, um die Leistung meiner Anwendung zu verbessern. Die meisten meiner Daten werden in Form von Hashes gespeichert, wenn sie von der API zurückgegeben werden, und diese Daten werden manipuliert (eine Art Duplikation mit groupby).

Ich benutze Ruby 1.9 und Rails 3.2. Ich muss wissen, wie ich dieses Speicherleck aus meiner Anwendung entfernen kann.

+0

Sind Sie sicher, dass Sie ein Speicherleck haben oder ist es möglich, dass Ihre Caches Speicher verbrauchen (weil das Caches tun)? Vielleicht möchten Sie auch Ihren Code posten - ohne Code können wir nur raten ... – spickermann

+0

Ich habe die Größe des Cache-Ordners gesehen und es scheint nicht zu groß zu sein, etwa 20MB. Ich hätte den Code gepostet, aber es ist zu kompliziert, Abhängigkeiten von anderen Modulen zu haben. Ich suche nach häufigen Fallstricken, die wir Programmierer in RoR machen, die Speicherlecks verursachen. – amair

+0

Als Randnotiz: Beide - [Ruby 1.9] (https://www.ruby-lang.org/en/news/2014/01/10/ruby-1-9-3-will-end-on-2015 /) und [Schienen 3.2] (http://weblog.rubyonrails.org/2015/1/6/Rails-4-1-9-and-4-013-have-been-released/) - sind veraltet . Es wird keine Fehlerbehebungen oder Sicherheitsupdates für diese Versionen geben. Sie könnten ein Upgrade auf neuere Versionen in Betracht ziehen. – spickermann

Antwort

3

Sie bestätigen sollte, dass Sie tatsächlich ein Speicherleck haben und kein Speicher aufblasen. Sie können lesen über Rubin GC here

GC.stat[:heap_live_slot] - diese stellt die Objekte, die nicht nach dem letzten GC gelöscht werden. Wenn diese Anzahl ständig steigt Anfrage auf Anfrage, dann können Sie sicher sein, dass Sie ein Speicherleck haben.

+0

Dies ist ein guter Anfang. Ich bin mir ziemlich sicher, dass ich ein Speicherleck habe und nicht eine Bloat, weil nach einer bestimmten Anzahl von Anfragen meine Anwendung abstürzt. Beeinträchtigt das zu viel Verarbeitung in Controllern, sollte ich mehr von meiner Logik in Module verschieben? – amair