5

Ich versuche, die Leistung meiner Pre-Beta Rails 3.2 App auf Heroku zu verbessern.Auf New Relic was trägt zu "Time Ruby" für eine Heroku Rails App bei?

Aggressives Caching hat die Dinge dramatisch verbessert, aber ich bemerke immer noch einen großen Beitrag von "Zeit in Ruby verbracht", wenn ich die Reaktionszeit meines App-Servers auf New Relic (hellblau in der Grafik) betrachte.

Welche Teile einer Rails-App tragen typischerweise zu dieser "Ruby-Zeit" bei?

New Relic time spent in ruby

Ich dachte zunächst dies in einem meiner Haupt Controllern bis hin zu komplexen conditionals zurückzuführen war, sondern haben dies vereinfacht. Meine Ansichten werden jetzt sehr aggressiv zwischengespeichert, indem man das Fragment-Caching von russischen Dolls und Memcache verwendet (wow!).

Kann die Bereitstellung von statischen Assets eine Ursache sein? (Umzug nach S3/CloudFont ist auf der Todo-Liste ...)

Vielen Dank!

(I bereits delayed_job Setup haben und haben alle bewegt, die ich in den Hintergrund kann. Ich bin auch Unicorn als meine Web-Server.)

AKTUALISIERT Performance Tuning

Nach aggressive Caching, Ich suchte nach anderen Möglichkeiten, die App-Leistung zu verbessern.

Zuerst habe ich die Garbage Collection-Überwachung als Vorschlag hinzugefügt und festgestellt, dass GC nicht signifikant zur Ruby-Zeit beigetragen hat.

enter image description here

Als nächstes habe ich beschlossen, durch Zugabe in einer CDN (Cloudfront über den CDNsumo Add-on) mein Asset dient getroffen. Interessanterweise hat dies meine Ruby-Zeit bei der NR-Überwachung verringert. (Das CDN wurde bereitgestellt und dann durch den letzten Anforderungs-Test ganz rechts in der Grafik unten erwärmt.) Die meisten meiner Seiten haben ein paar hundert kb von css & Javascript - also nicht klein, aber nicht massiv.

enter image description here

Schließlich habe ich von dem 'Basic' Starter-Datenbank in der kleinsten Produktion db 'Crane' aufgewertet. Dies hatte einen dramatischen Effekt auf die Leistung. Nach ein wenig Caching von PG fliegt die App. (letzte 3 Request Spikes in der Grafik unten).

enter image description here

nach Hause nehmen Nachrichten für andere zu stimmen versuchen, ihre Heroku Apps: (. Dh Caching, CDN, Datenbank, Ruby-Code)

  • Einfache Performance-Tuning in mehreren Bereichen hat über eine synergistische Wirkung der Stapel.
  • Umgekehrt ist jeder einzelne Leistungsabfall ein Flaschenhals, den Sie nicht überwinden können, selbst wenn Sie die anderen Bereiche abstimmen (z. B. die langsamen Basis- oder Entwicklungsdatenbanken auf Heroku gegenüber einer "teuren" Produktionsdatenbank) meine App-Leistung).
  • NewRelic ist wichtig, um herauszufinden, wo die meisten Vorteile erzielt werden können.

Antwort

7

"Ruby" Zeit ist wirklich die "andere" Eimer für NewRelic Tracing. Die anderen Kategorien sind explizite Maße (dh wie viel Zeit für Anrufe in memcached ausgegeben wird). Ruby Zeit wird die ganze Zeit nicht in einem dieser Eimer verbracht.

Was passieren sonst noch in "Ruby" -Zeit? Der Kandidat Nummer eins ist Garbage Collection (GC). Wenn Sie Ruby-1.9+ laufen lassen, können Sie NewRelic Profilierung von GC ermöglichen durch einen Initialisierer wie config/initializers/newrelic.rb mit der folgenden erstellen:

GC::Profiler.enable 

Diese GC Zeit als separate NewRelic Kategorie für Sie verfolgen wird.

Wenn Sie auf dem GC in guter Verfassung sind, besteht der nächste Schritt in der Ansicht Webtransaktionen, um zu sehen, wie diese Durchschnittszeiten verteilt sind. Vielleicht sind ein oder zwei Aktionen in Ihrer Anwendung schreckliche Darsteller und verantwortlich für diese Durchschnittswerte.

Viel Glück und fühlen Sie sich frei, direkt zu erreichen, wenn Sie immer noch Probleme haben. Performance-Tuning ist eine schwarze Kunst.

+1

Danke Winfield, das ist eine großartige Idee. Ich füge das GC-Profiling hinzu und wage mich tiefer in die Ansichten von NC ein. –

+0

Nochmals vielen Dank Winfield für Ihren Vorschlag. Ich bin jetzt ziemlich glücklich, nachdem ich meinen Code verbessert habe, Caching, CDN und eine schnellere Datenbank hinzugefügt habe. Interessant, wie langsam das Basic heroku db mit Crane und Up verglichen wird. –

+1

Die Datenbank ist die häufigste Leistungseinschränkung und der Engpass in verteilten Web-Systemen. Freut mich zu hören, dass Sie eine Menge Laufleistung aus Caching und db vertikaler Skalierung haben. Zögern Sie nicht, mich anzurufen, wenn Sie in der Zukunft Leistungsprobleme haben. [email protected] – Winfield

Verwandte Themen