2009-01-14 11 views
6

Ich habe Probleme mit meiner Rails-App, die auf meinem Staging-Server sehr langsam ist. Was am verwirrendsten ist, ist die letzte Zeile der Protokollausgabe für jede Anforderung.Warum addieren sich meine Rails Server Renderzeiten nicht?

Es scheint, dass die Zeiten für Ansicht und Datenbank nicht einmal annähernd der gesamten Renderzeit entsprechen. Auf einer Seite ist es so schlimm wie ~ 1000ms für die Fertigstellung, ~ 450ms für die View und ~ 20ms Datenbank.

Woher kommt der Rest der Zeit, um die Seite zu erstellen?

Antwort

0

Ich empfehle die Verwendung New Relic's RPM service. Es hat eine kostenlose Version, aber der Bronze-Service ($ 40 pro Monat) ist wunderbar und hilft weiter, diese Probleme aufzuspüren.

+0

http://www.newrelic.com/ ist die gewünschte URL – RichH

+0

das beantwortet die Frage nicht und pimpert nur den Service - wie ist das die beste Antwort oder überhaupt eine Antwort? – eyberg

+0

Es könnte helfen, herauszufinden, warum seine Aktionen langsam sind, was seine eigentliche Frage ist. So oder so, Kommentar zu einem 18 Monate alten Kommentar: | –

2

Wenn Dinge mysteriös sind .... Profiler sind dein Freund!

Ein Profiler erstellt Statistiken darüber, welche Methoden am häufigsten aufgerufen werden und wie lange bei jedem Methodenaufruf ausgegeben wird.

ruby-prof macht den Trick für mich, wenn ich in RubyLand bin, und es wird eine nette Call-Grafik (im HTML-Format, wenn Sie wollen), das macht es leicht und einfach zu sehen, welche Methoden verlangsamen Ihre Anfrage .

0

Ich war gerade dabei, diese Frage mit der gleichen Antwort zu überdenken, also werde ich nur huckepack. Hier ist ein sehr kleiner Rubin-Prof snippet von einer Ansicht Rendering. Es ist erstaunlich, wie viel Zeug unter der Haube läuft.

0

Neben dem Rendering und der Datenbank-Zeit wird etwas Zeit in Ihrem Controller-Code und dem Rails-Framework verbraucht. Dies kann sehr langsam sein, wenn Ihrem Staging-Server zu wenig Ressourcen zugewiesen sind. Sie sollten jedoch nicht, dass die Dauern im Protokoll nicht immer perfekt sind, insbesondere die Datenbankdauer.

0

Was sagt Ihr Apache Log? Es wird definitiv unterschiedliche Nummern haben, um die Zeit anzuzeigen, die benötigt wird, um die Anfrage zu erfüllen.

Apache sendet Anfragen an Schienen und Schienen arbeitet daran und das ist, was Sie in Ihren Produktionsprotokollen sehen.

Das ganze HTML muss noch in Ihrem Browser gerendert werden (schweres CSS, Bilder, js usw.). Versuchen Sie, die Firefox-Erweiterung httpwatch zu verwenden, um die Renderzeit der UI-Elemente zu kennen und sie sollte sich addieren.

Wie bereits vorgeschlagen, NewRelic sollten Sie anständige Auflösung der Zeit in verschiedenen Aktivitäten (M V C)

2

ich gefunden habe, ein großer Teil der Render verbrachte Zeit geben, auf Schienen ausgegeben werden kann Erstellen und Active Record Objekte vorbereitet. Nach der Abfrage und vor der Ansicht. Abhängig davon, wie viele Datensätze zum Beispiel von einem 'Fund' zurückgegeben werden.

Verwandte Themen