Apache 2 impostazioni per il sito web di traffico elevato

Ho problemi con il carico sul mio sito web. È un server ec2 amazon con un RAM da 15Gb e 4 CPU dietro un LB.

apachetop dice che sto ottenendo circa 80 reqs al secondo che sembra davvero basso per questo tipo di server e il carico (dato dalla parte superiore) è di solito intorno a 15 ma aumenta a circa 150 in 24 ore. Vedo circa 100 processi apache attivi in ​​qualsiasi momento. Apache è in modalità prefork.

Mysql è usato molto poco sul server e quasi non ci sono file statici.

Ecco le impostazioni di Apache:

Timeout 20 KeepAlive Off MaxKeepAliveRequests 0 KeepAliveTimeout 3 <IfModule mpm_prefork_module> StartServers 40 MinSpareServers 25 MaxSpareServers 40 ServerLimit 400 MaxClients 400 MaxRequestsPerChild 4 </IfModule> 

Può qualcuno consigliare su come modificare le impostazioni? Grazie!

Modifica: La configuration è stata ottenuta per prova ed errore. Qualunque cosa e voglio dire con un numero, il cambio a queste linee rende il carico innalzamento della velocità come 5 minuti. Salta letteralmente a 200-300 in pochi minuti. Soprattutto MaxRequestsPerChild. Ho provato con 10, 15, 100, 1000 e il carico è solo un giro di slancio.

A proposito di php – in realtà sono solo alcuni file php che non sono realmente affatto costosi. Sputano solo alcune cose semplici.

Se accendo il carico KeepAlive va anche allo spazio.

Modifica: questo è ciò che fornisce lo stato del server:

 Current Time: Monday, 16-Apr-2012 07:26:07 UTC Restart Time: Monday, 16-Apr-2012 07:06:44 UTC Parent Server Generation: 3 Server uptime: 19 minutes 22 seconds Total accesses: 65803 - Total Traffic: 51.8 MB CPU Usage: u24.25 s1.99 cu0 cs0 - 2.26% CPU load 56.6 requests/sec - 45.7 kB/second - 825 B/request 65 requests currently being processed, 0 idle workers WWWCWWCCWWWWCCCWWCWWCWCWWCCWWWCCWWWCWWCWWWSWC..C..W...WCCCC.C.GW CWCC.CWWCCC.WC.................................................. ................................................................ ................................................................ ................................................................ ................................................................ ................ 

Posso vedere un sacco di collegamenti in modalità "Attesa", ma non so perché il req / sec sia così basso. Solo 56 e tante slot sono vuote …

Aggiornamento: ho cambiato il codice un po ', ho rimosso tutte le routine che potrebbero rallentare le cose e sto ancora ottenendo solo 100 req per secondo. Il carico è stabile a circa 10 …

Penso che queste macchine possano fare molto di più …

  • C'è qualche possibilità di block IP?
  • Apache ReverseProxyPass riduce a http piuttosto che a https
  • Perché l'authentication di Apache Basic non funziona?
  • Installazione Apache Apache, host AWS che non serve sito
  • Su centos 5.7 usando apache2 devo distriggersre l'elenco dei moduli predefiniti abilitati per migliorare le performance e la sicurezza.
  • Limitare sudo a una sola directory ed è subdirectories dal file sudoers
  • Configurare il sottodominio utilizzando il problema apache virtualhost
  • HAProxy / Varnish: reindirizzamento di una percentuale di traffico
  • 2 Solutions collect form web for “Apache 2 impostazioni per il sito web di traffico elevato”

    La tua situazione mi suggerisce che lo script PHP è in attesa di qualcosa da completare (come una query SQL o una chiamata API). Devi essere in grado di triggersre il module Extended Status di apache per avere un'idea molto migliore di quello che apache sta facendo.

    Per farlo, nel tuo httpd.conf devi abilitare mod_status e avere 'ExtendedStatus On' (vedi: http://httpd.apache.org/docs/2.0/mod/mod_status.html#extendedstatus )

    per esempio.

     LoadModule status_module modules/mod_status.so ExtendedStatus On <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from xxx.xxx.xxx.xxx </Location> 

    Sostituisci xxx.xxx.xxx.xxx con gli IP (i) che si desidera accedere alla pagina di stato e quindi colpisce http://yoursite.com/server-status per visualizzare l'output. La maggior parte dei config sono probabilmente già nei file .conf o sono stati commentati.

    Una volta che hai accesso ad esso, vedrai qualcosa di simile a:

     K___K_W_........................................................ ................................................................ ................................................................ ................................................................ Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" KeepAlive (read), "D" DNS Lookup, "L" Logging, "G" Gracefully finishing, "." Open slot with no current process 

    Questo ti dà molto più idea di ciò che sta accadendo dietro le quinte in Apache. Se il mio primo assunto è corretto (cioè il tuo script PHP sta aspettando qualcosa), allora vedrai un sacco di attività in modalità "W".

    Prova – se hai ancora bisogno di aiuto, fathemes sapere cosa sembra l'output di cui sopra.

    Anche la media di carico di 15 è troppo alta – è indicativo che il sistema sta attraversando un collo di bottiglia.

    Cosa sta funzionando in Apache?

    Se è contenuto dinamico, controllare se le CPU sono completamente utilizzate; il codice potrebbe essere necessario per ottimizzare o potrebbe essere necessario scalare più istanze EC2 per gestire i requisiti di CPU del contenuto.

    Se coinvolge i clienti caricando una quantità decente di dati, allora potrebbe essere il sovraccarico del disco (controllare i numbers iowait in alto) o anche la width di banda disponibile.

    A seconda di ciò che è in esecuzione, potrebbe essere ansible utilizzare un MPM con performance migliori rispetto al prefork.

    MaxRequestsPerChild 4 è incredibilmente basso – sapete perché questo è impostato? E perché è impostato KeepAlive Off ? Entrambe le impostazioni sono molto male da una prospettiva di performance; puoi dare un po 'di background su come è arrivata la configuration in cui si trova?

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