Perché apache rallenta durante la notte?

Saluti esperti,

Sul mio server CentOS 5.4 dedicato, configuro apache con circa una dozzina di host virtuali. Provo alcuni di loro, ciascuno carichi entro un secondo; abbastanza veloce. La media di carico è inferiore a 1. Nessun problema. Sto eseguendo siti HTML statici, un blog WordPress con MySQL 5.0 … questi non sono siti di width di banda elevata; niente che sottolineerebbe questo server.

  • Raid ricostruisce l'impatto delle performance
  • Ubuntu 8.04 server: non può invocare a
  • Come build la mia distribuzione Linux in VMWare Fusion
  • Passaggio del client IP in più proxy
  • Copia atomica di più directory
  • Condividi / casa tra i datacenter
  • La mattina successiva, entrerò a lavorare, caricare il sito principale e richiedo 10-20 secondi per caricare. Verifico la media di carico sul server e sta muovendo intorno a 3, a volte fino a 5, una volta l'ho vista a 8, mai al di sotto 2. A questo punto ho rimbalzato con grazia apache:

    # apachectl -k graceful 

    Prende circa mezzo minuto, poi tutto è benissimo. Tutti gli host virtuali caricano velocemente, less di un secondo. La media di carico scende rapidamente sotto 1.

    Quando controlla / lo stato del server, non è molto succedendo; quando si controlla il traffico netto ( vnstat -l o vnstat -h ) non viene utilizzata molta width di banda. Entrambe sono compariabili all'inizio della giornata come alla fine. Tuttavia, quando lo controllo al mattino, apache è molto, molto più lenta di praticamente tutto il giorno. Cosa sta succedendo durante la notte per rendere apache tanto lenta e consumare tante risorse di sistema più?

     # httpd -V Server version: Apache/2.2.3 # uname -a Linux myserver.com 2.6.18-92.el5 #1 SMP Tue Jun 10 18:51:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux # free total used free shared buffers cached Mem: 1025576 1017292 8284 0 8208 43160 -/+ buffers/cache: 965924 59652 Swap: 2096472 361012 1735460 

    Suppongo di poter creare un cronjob che each giorno abbia rimbalzato abbastanza apache, ma sembra una soluzione veloce e sporca. Preferirei trovare la causa e correggerlo.

    AGGIORNAMENTO 2009-10-28 14:38; campioni prelevati each 10 secondi in media per cinque minuti:

     $ sar -W 10 30 && date Linux 2.6.18-92.el5 (myserver.com) 10/28/2009 02:32:36 PM pswpin/s pswpout/s 02:32:46 PM 10.31 30.43 02:32:56 PM 2.30 32.93 02:33:06 PM 21.56 0.00 02:33:16 PM 1.80 0.00 02:33:26 PM 5.69 26.67 02:33:36 PM 0.10 0.00 02:33:46 PM 25.70 7.60 02:33:56 PM 10.61 7.11 02:34:06 PM 4.10 2.60 02:34:16 PM 0.70 0.00 02:34:26 PM 0.00 0.00 02:34:36 PM 0.00 0.00 02:34:46 PM 3.80 0.00 02:34:56 PM 0.00 0.00 02:35:06 PM 0.00 11.01 02:35:16 PM 7.70 30.30 02:35:26 PM 20.32 0.00 02:35:36 PM 1.60 0.00 02:35:46 PM 11.60 0.00 02:35:56 PM 2.50 0.00 02:36:06 PM 0.00 0.00 02:36:16 PM 3.60 0.00 02:36:26 PM 0.00 0.00 02:36:36 PM 0.00 0.00 02:36:46 PM 0.00 0.00 02:36:56 PM 445.20 56.60 02:37:06 PM 0.00 0.00 02:37:16 PM 0.00 0.00 02:37:26 PM 0.00 0.00 02:37:36 PM 0.00 0.00 Average: 19.31 6.84 Wed Oct 28 14:37:36 PDT 2009 

    Curiosamente, apache non è lento questa mattina. Ho fatto qualche modifica al numero di server iniziati, num i server di riserva, numero massimo di server, ecc., Ieri. Permettethemes di get i vecchi valori e confrontare …

    Valori originali da /etc/httpd/conf/httpd.conf:

     StartServers 20 MinSpareServers 20 MaxSpareServers 120 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 

    Nuovi valori che, da tutte le apparenze, sembrano funzionare bene:

     StartServers 30 MinSpareServers 30 MaxSpareServers 40 ServerLimit 50 MaxClients 50 MaxRequestsPerChild 4000 

    Probabilmente continuerò a modificare un po 'queste impostazioni, ma sembrano funzionare bene ora.

    Sar comanda ancora questa mattina:

     $ sar -W 10 30 && date Linux 2.6.18-92.el5 (myserver.com) 10/29/2009 09:31:09 AM pswpin/s pswpout/s 09:31:19 AM 5.80 54.40 09:31:29 AM 62.10 0.00 09:31:39 AM 0.00 0.00 09:31:49 AM 0.00 0.00 09:31:59 AM 0.00 0.00 09:32:09 AM 3.30 0.00 09:32:19 AM 2.70 0.00 09:32:29 AM 0.00 0.00 09:32:39 AM 0.00 0.00 09:32:49 AM 0.00 0.00 09:32:59 AM 3.10 0.00 09:33:09 AM 5.80 0.00 09:33:19 AM 0.00 0.00 09:33:29 AM 0.00 0.00 09:33:39 AM 0.00 0.00 09:33:49 AM 0.00 0.00 09:33:59 AM 0.00 0.00 09:34:09 AM 0.00 0.00 09:34:19 AM 0.00 0.00 09:34:29 AM 0.00 0.00 09:34:39 AM 4.00 0.00 09:34:49 AM 0.10 0.00 09:34:59 AM 0.00 0.00 09:35:09 AM 4.80 0.00 09:35:19 AM 0.00 0.00 09:35:29 AM 291.29 0.00 09:35:39 AM 0.00 0.00 09:35:49 AM 0.80 0.00 09:35:59 AM 0.00 0.00 09:36:09 AM 0.00 0.00 Average: 12.78 1.81 Thu Oct 29 09:36:09 PDT 2009 

    La media è in realtà più bassa! E il server ha più traffico rispetto a ieri. Womble, sembra che avevi ragione! E adesso tutto è nuovo nell'universo.

    John Gardeniers, buona idea! Ha l'interruttore -o [filename] solo per questo. Grazie per il consiglio!

    Jeremy Visser, dstat è uno strumento veramente dolce! Grazie per il consiglio! Non è stato installato, whereva yum install dstat .

  • Modifica del fuso orario in un sistema RHEL5 / CentOS
  • Come condividere il traffico multicast a molti ville
  • Come configurare Apache NameVirtualHost su SSL?
  • Che cosa significa "net_ratelimit: 44 callbacks soppresso" significa su un linux?
  • Quale server di database scala meglio: PostgreSQL o MySQL?
  • Cambiare l'IP in output di qmail
  • 2 Solutions collect form web for “Perché apache rallenta durante la notte?”

    Sulla base della tua output free , sospetto fortemente che i processi Apache siano fortemente sepolti nel swap. L'output di sar -W 1 0 confermerà (o confutera) questa ipotesi (eseguirla quando la macchina è in esecuzione lentamente).

    Se i processi di Apache non sono tutti effettivamente richiamando le richieste (come mostrato da mod_status), dovresti impostare il numero dei bambini "spare" (con MaxSpareServers) in modo che ottengano più rapidamente (e quindi non si trovano attorno alla RAM). Se hai davvero bisogno del numero di bambini che stai eseguendo per servire il carico di richiesta, avrai bisogno di più RAM (vorrei andare con un altro 1 GB in su, la RAM è economica, non è la diagnosi).

    Quali sono i processi che mangiano tutta la memory? Provare un iostat / vmstat prima di riavviare apache – potrebbe essere un problema di I / O.

    Per il monitoraggio della tendenza, consiglio di utilizzare munin / colectd (quelli hanno anche apache molto utili (per te caso, in particolare) plugin).

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