Ridurre la richiesta di richiamo di Apache

In New Relic, una delle metriche che visualizzano come parte del tempo di risposta dell'applicazione è "Coda di Richiesta" .:

Per raccogliere il tempo di accodamento della richiesta, è necessario contrassegnare la richiesta HTTP con un timestamp quando inizia la coda. [1]

  • Numero eccessivo di processi di sonno in CentOS - come diagnosticare?
  • url riscrivere per generare la cache generata da thumnails come una statica, una domanda di syntax
  • Le proxy inversa HTTP in genere abilitano HTTP Keep-Alive sul lato client della connessione proxy e non sul lato server?
  • Come posso configurare Apache per utilizzare HTTPS per l'accesso esterno, ma HTTP per l'accesso interno?
  • Certificati del lato client (Apache, Linux, OpenSSL)
  • Come evitare di riavviare il proxy Apache quando si riavvia CouchDB
  • Questo viene fatto aggiungendo un'intestazione HTTP nell'Appache httpd.conf:

    RequestHeader set X-Request-Start "%t" 

    New Relic menziona che:

    Per la richiesta di benna di accodamento, un operatore del sito può fornire più istanze di applicazione.

    Tuttavia abbiamo visto aggiungere nuove istanze di applicazione (cioè i nodes web) non influenza il tempo di accodamento della richiesta – rimane costante. Stiamo vedendo questo misurato a circa 250ms.

    Quali fattori influenzano la lunghezza della coda di richiesta e come può essere ridotta?

    [1] http://support.newrelic.com/help/kb/features/tracking-front-end-time

  • Differenza tra / etc / hosts e /etc/resolv.conf
  • Cosa potrebbe causare l'intervallo di tempo / fuso orario di Apache per cambiare in modo intermittente?
  • Impostazione del nome host: FQDN o nome breve?
  • Come trovare il process che causa la richiesta arp?
  • Avere richieste di log di Apache quando vengono, piuttosto che quando finiscono
  • Apache VirtualHost con mod-proxy e SSL
  • 2 Solutions collect form web for “Ridurre la richiesta di richiamo di Apache”

    Penso che il modo migliore per farlo è aumentare i parametri 'Server Limit' e 'Max Clients' nell'Appache Config

    Ciò impone quanti thread che Apache possa elaborare contemporaneamente. Se si dispone di un valore "Max Clients" di 100, Apache può elaborare fino a 100 richieste contemporaneamente.

    Probabilmente è anche opportuno notare che Apache è utile per piccoli file (text, forse CSS / JS ecc.) Ma non così grande nei file più grandi come immagini, video, flash ecc. Perché ognuno di questi richiede una nuova richiesta stai usando Keep-alive ma questo non migliora troppo). Quindi, se hai una pagina con 49 risorse esterne (quindi 50 richieste in totale) che richiede 1 secondo per caricare e che i tuoi client max sono impostati a 100, puoi elaborare solo due visualizzazioni di pagina un secondo prima che le richieste inizino a essere in coda.

    Puoi get questo aspetto in molti modi, cercare di scaricare i tuoi contenuti su un CDN (i prezzi iniziano da circa $ 0.10 / GB ma se il tuo trasferimento di dati è alto potrebbe essere utile entrare in contatto con Edgecast o Akami poichè i loro prezzi sono molto più economici bulk). Ciò significa che il tuo server non deve preoccuparsi di nessuna delle risorse statiche necessarie per caricare una pagina, quindi nell'esempio precedente è ora fino a 100 visualizzazioni di pagina al secondo prima che le richieste inizino a fare una coda.

    Se non si desidera esplodere su un CDN, suggerirei di get due IP sul tuo server e collegarli ad Apache e uno a NGINX. NGINX è un server ad altissima performance in grado di gestire migliaia di volte più connessioni rispetto a Apache, NGINX non utilizza la coda di richiesta come Apache perché non blocca. Purtroppo NGINX non dispone di tutte le funzionalità di Apache, per esempio non è ansible eseguire PHP direttamente tramite NGINX senza proxy a Apache / FCGI / HipHop ecc.

    In aggiunta a questo, nella tua domanda che si dice "nodes web", avrei ragione nel pensare di utilizzare Apache come un bilanciatore di carico frontale / proxy server a questi nodes? Se così fosse, ti suggerisco di provare qualcosa come NGINX, Varnish, HAProxy ecc., Poiché sono molto più adatti a fare cose come quella e alla gestione di connessioni simultanee.


    EDIT:
    Ho pensato che questo potrebbe interessarti per quanto riguarda i server frontali LB.
    Utilizziamo Apache come frontend proxying a 16 nodes applicativi suddivisi in due server. Il server proxy era in esecuzione su un server Intel Core i5 quad core (in modo da non sottovalutare). Abbiamo iniziato a notare una relazione parabolica tra il numero di richieste / secondo e il tempo di risposta. A circa 2000 richieste al secondo la carica della CPU avrebbe sparato e each risposta avrebbe portto circa 800 ms per completare, per 3000 r / s each risposta avrebbe impiegato circa 2 secondi. Abbiamo passato a NGINX e abbiamo colpito 5000 r / s mentre solo aggiungendo circa 50ms alla latenza e il carico della CPU era un quarto di quello che era con Apache.
    Ovviamente dipende completamente la tua situazione, quello che stai facendo e quali risorse avete a disposizione, ma ho solo pensato che ti darei la mia presa =)

    Devo sollecitare la domanda ovvia: la documentazione afferma che dovresti utilizzare l'intestazione http X-Queue-Start (o X-Queue-Time), ma hai citato che stai utilizzando X-Request-Start. Stai aggiungendo l'intestazione corretta?

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.