Faccio molte prestazioni e ridimensiono il lavoro e quello che ho scoperto è che:
Ogni carico dell'applicazione è unico
Risposte generiche come aggiungere più ram, ottenere un altro server, fare y, provare x sono spesso lezioni di frustrazione e lasciare a configurazioni contorte.
Misura le cose giuste
Una delle maggiori sfide consiste nel determinare quali parametri di riferimento sono importanti. Questo spesso richiede un passo indietro e devi metterti nei panni del tuo cliente. A volte, la progettazione del sito semplicistica cambia e comporta enormi vantaggi per il visitatore web. Ecco perché mi piacciono gli strumenti come YSlow! che si concentrano maggiormente sull'esperienza dell'utente finale anziché sul livello del server. Una volta deciso quale sia il punto di riferimento giusto per il tuo sito, puoi iniziare la sintonizzazione. I benchmark possono essere il tempo totale di caricamento della pagina, la dimensione totale della pagina, l'efficacia della cache, la latenza del sito, ecc. Devi scegliere quello che ha senso per la tua applicazione.
Bulloneria
Uno che stai seguendo i parametri giusti, inizia a un livello molto basso. Mi piace usare sysstat. È possibile ottenere una grande quantità di informazioni da sysstat e aiutarti a distinguere quale sistema potrebbe limitare le prestazioni complessive dell'applicazione. Generalmente, bollo i problemi di prestazioni in:
- stack di rete
- stack di memoria
- disco io
- livello di applicazione
- strato os
Usando sysstat e altri strumenti, puoi iniziare a dividere i peli e trovare il sistema che sta limitando le prestazioni.
Ad esempio, ho visto fallire i server molto caricati a causa della configurazione dell'applicazione. La scarsa memorizzazione nella cache, la mancanza di intestazioni scadute sul contenuto statico, l'utilizzo di HTTP vs include file, ecc., Hanno contribuito a scarse prestazioni dell'applicazione. La risoluzione di questi problemi dell'applicazione non ha richiesto modifiche hardware. In altri casi, ho visto i dischi al massimo nonostante tonnellate di cache. Il passaggio a dischi più veloci ha risolto il problema.
Risciacqua e ripeti
Spesso durante l'ottimizzazione dell'applicazione, si stapperà un collo di bottiglia per trovarne solo un altro. Questo è il motivo per cui ti consiglio di provare a monitorare qualunque cosa tu stia sintonizzando.
Ad esempio, supponi di aver risolto un problema di I / O del disco ma l'app è ancora lenta. Potresti pensare di aver sprecato i tuoi sforzi, ma quello che succede è che hai semplicemente colpito un altro collo di bottiglia. Monitorando attentamente l'IO del disco, si può essere certi di migliorare l'IO del disco anche se i monitor delle prestazioni delle applicazioni importanti non cambiano.
Ottieni gli strumenti giusti
Assicurati di utilizzare gli strumenti giusti per il lavoro. Il monitoraggio, i test, l'analisi comparativa, la profilazione e altre tecniche di ottimizzazione hanno tutti una varietà di strumenti. Trova lo strumento più adatto alla tua situazione.
Regole empiriche
Mentre ogni app è unica, trovo alcuni punti di partenza standard:
- i database di memoria amano la memoria
- il disco tutto tranne il raid 10 può uccidere le prestazioni del database
- ottimizzazioni errate: i grandi valori non si traducono in grandi prestazioni
- applicazione - incolpare il server per un design di app scadente
I tuoi prossimi passi
Se non trovi il collo di bottiglia, l'aggiunta di un server potrebbe non essere di grande aiuto. Per risolvere l'IO del disco potrebbe essere necessario un altro server o SAN. Se hai un collo di bottiglia nella RAM un altro server risolverà il problema solo in quanto aggiunge più RAM. Spostamento piuttosto costoso rispetto all'aggiunta di più RAM al server esistente.
Soluzione rapida
Over deploy. Ho dovuto farlo quando sembra che lo stack dell'applicazione sia il problema. Fondamentalmente caricare su CPU, RAM e IO del disco (RAID 10, 15K SCSI o SSD). Vai in grande sull'hardware e poi inizia la sintonizzazione. Questo ti tiene a galla fino a quando non risolvi i problemi.