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"?
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.
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.
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
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.
Grazie Winfield, è un'ottima idea. Aggiungerò il profilo del GC e approfondirò le opinioni di NC. –
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. –
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