Background:Python: Come si fa a trovare il consumo di CPU per un pezzo di codice?
Ho un'applicazione Django, funziona e risponde abbastanza bene il basso carico, ma il carico elevato come 100 utenti/sec, che consuma 100% della CPU e poi a causa della mancanza di CPU rallenta .
Problema:
- Profiling l'applicazione mi dà tempo impiegato dalle funzioni.
- Questa volta aumenta il carico elevato.
- Tempo consumato può essere dovuta a calcoli complessi o per l'attesa per la CPU.
quindi, come trovare i cicli della CPU consumati da un pezzo di codice?
Poiché, riducendo il consumo della CPU si aumenta il tempo di risposta.
- avrei potuto scritto estremamente codice efficiente e la necessità di aggiungere più potenza della CPU
O
- potrei avere qualche stupido codice prendendo la CPU e causando il rallentamento?
Ogni aiuto è apprezzato!
Aggiornamento:
- Sto usando Jmeter per il profilo my webapp, mi dà un throughput di 2 richieste/sec. [100] utenti
- ho un tempo medio di 36 secondi su 100 richiesta, in funzione del tempo di 1,25 secondi il 1 ° richiesta.
Ulteriori informazioni
- configurazione Nginx + Uwsgi con 4 lavoratori
- Nessun database servendosi di una risposta da un API REST
- Il 1 ° ha colpito la risposta di API REST viene memorizzato nella cache , quindi non fa differenza.
- Utilizzando
ujson
per JSON parsing.
curioso di sapere:
- Python-Django è utilizzato da tanti org per tanti grandi siti, allora ci deve essere alcuni strumenti di analisi di debug/Memory-CPU di fascia alta.
- Tutti quelli che ho trovato erano frammenti di codice casuali che eseguivano il profiling.
Il mio primo passo nella profilatura è vedere * quale funzione (s) * trascorri la maggior parte del tempo, e indagano sul perché, se è giustificato, e se/come può essere ridotto. L'importo * del tempo (spesso) non è tanto importante quanto * l'importo proporzionale * del tempo. –
Tutto il tempo impiegato sembra essere distribuito in tutta l'applicazione. Nessun punto specifico sembra essere un'area problematica. –
Sembra? Hai misurazioni esatte? Vedi http://stackoverflow.com/a/582337/851737 per aiuto. – schlamar