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?
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.
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.
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).
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.
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. –
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. –
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