5

Sto cercando di migliorare le prestazioni della mia app pre-beta Rails 3.2 ospitata su Heroku.Su New Relic cosa contribuisce al "Tempo trascorso in Ruby" per un'app Heroku Rails?

Il caching aggressivo ha migliorato notevolmente le cose, ma noto ancora un grande contributo da "Tempo trascorso in Ruby" quando guardo il tempo di risposta del mio server delle app su New Relic (blu chiaro sul grafico).

Quali parti di un'app Rails in genere contribuiscono a questo "tempo di Ruby"?

New Relic time spent in ruby

inizialmente ho pensato che questo era dovuto al condizionali complessi in uno dei miei controllori principali, ma hanno semplificato questo. I miei punti di vista ora sono memorizzati in modo molto aggressivo usando la cache dei frammenti di Russian Doll e memcache (wow!).

La pubblicazione di attività statiche può essere una causa? (Passando a S3/CloudFont è sulla lista todo ...)

Grazie!

(ho già messa a punto delayed_job e hanno spostato tutto quello che posso in secondo piano. Sto anche utilizzando Unicorn come il mio web server.)

prestazioni AGGIORNATO sintonia

Dopo caching aggressivo, Ho iniziato a cercare altri modi per migliorare le prestazioni delle app.

Per prima cosa ho aggiunto il monitoraggio della raccolta di rifiuti come suggerito, trovando che GC non stava contribuendo in modo significativo al tempo di Ruby.

enter image description here

Poi ho deciso di colpire la mia attività a servizio con l'aggiunta di un CDN (Cloudfront tramite il CDNsumo add-on). Interessante questo ha effettivamente diminuito il mio tempo di Ruby sul monitoraggio NR. (Il CDN è stato predisposto e poi riscaldato dall'ultimo test di richiesta all'estremità destra del grafico sottostante.) La maggior parte delle mie pagine ha un paio di centinaia di kb di css & javascript - quindi non minuscolo ma non massiccio.

enter image description here

Infine, ho aggiornato dal database di avviamento della 'base' al più piccolo db di produzione 'Crane'. Questo ha avuto un effetto drammatico sulle prestazioni. Dopo un po 'di cache da parte di PG, l'applicazione vola. (ultimi 3 picchi di richiesta sul grafico sottostante). Home Messaggi

enter image description here

prendere per gli altri cercando di ottimizzare le loro applicazioni Heroku: (. es caching, CDN, database, codice Ruby)

  • semplice ottimizzazione delle prestazioni in molteplici settori ha un effetto sinergico tra lo stack.
  • Viceversa, qualsiasi singolo drenaggio delle prestazioni sarà un collo di bottiglia che non è possibile superare anche se si regolano le altre aree (ad esempio i database di base o Dev lenti su Heroku rispetto a un database di produzione "costoso" - il db di base lento stava uccidendo la mia performance dell'app).
  • NewRelic è essenziale per capire dove si possono ottenere i maggiori guadagni.

risposta

7

"Ruby" è davvero il secchio "Altro" per traccia NewRelic. Le altre categorie sono misure esplicite (es .: quanto tempo è trascorso nelle chiamate a memcached). Il tempo rubino è tutto il tempo non speso in uno di quei secchi.

Quindi quali altre cose accadono in "Ruby"? Il candidato numero uno è Garbage Collection (GC). Se si sta eseguendo Rubino 1.9+, è possibile abilitare il profiling NewRelic di GC con la creazione di un inizializzatore come config/initializers/newrelic.rb con il seguente:

GC::Profiler.enable 

Questo sarà monitorare il tempo GC come categoria separata NewRelic per voi.

Se sei in buona forma su GC, il passaggio successivo consiste nell'utilizzare la visualizzazione Transazioni Web per vedere come vengono distribuiti questi tempi medi. Forse una o due azioni nella tua applicazione sono artisti orribili e responsabili di queste medie.

Buona fortuna e sentiti libero di contattare direttamente se hai ancora problemi. La messa a punto delle prestazioni è un'arte nera.

+1

Grazie Winfield, è un'ottima idea. Aggiungerò il profilo del GC e approfondirò le opinioni di NC. –

+0

Grazie ancora Winfield per il tuo suggerimento. Sono abbastanza felice ora dopo aver migliorato parte del mio codice, aggiungendo il caching, la CDN e un database più veloce. Interessante il modo con cui il basic heroku db viene confrontato con Crane e up. –

+1

Il database è il vincolo e il punto di controllo delle prestazioni più comuni nei sistemi Web distribuiti. Sono contento di sapere che hai ottenuto molto chilometraggio dalla cache e dal ridimensionamento verticale db. Sentitevi liberi di mandarmi una linea se avete problemi di prestazioni in futuro. [email protected] – Winfield