Apache genera enormi quantità di processi httpd

Sto eseguendo una macchina CentOS 6.7 (16 GB vRAM, 8 vCPU) con un semplice setup del server web (Apache / 2.2.15, PHP / 5.3.3, MySQL / 5.1.66), che ospita un negozio online con un numero moderato di impressioni di pagina (circa 2.000 ~ 4.000 al giorno).

Il server ha funzionato liscio negli ultimi 3 anni senza alcuna necessità di cambiare la sua configuration. Ora, dalla scorsa settimana – in qualche modo durante la notte – Apache / HTTP ricorrente diventa inaccessibile dopo un breve periodo di tempo (circa 30 minuti). Ho controllato alcuni parametri e ho visto che ci sono molti processi httpd in esecuzione. ps axf | grep httpd | wc ps axf | grep httpd | wc mostra qualcosa di simile:

  • Un modo semplice per redirect http://example.com a http://example.com/mylink con Apache?
  • Come faccio a scoprire i recenti avvisi SSH per Centos e il loro indirizzo IP?
  • Installazione di più versioni php e estensioni su freebsd
  • È ansible visualizzare il mio server apache (host locale) da casa o dal computer remoto che è fuori dalla mia LAN?
  • Imansible scoprire gli obiettivi iSCSI
  • Consenti SSH solo su uno degli indirizzi IP dei server
  •  387 2344 18354 

    Mentre il carico non è molto emozionante. top sembra questo:

    immettere qui la descrizione dell'immagine

    Un piccolo numero di processi httpd viene rilasciato di volta in volta, ma il numero totale continua a crescere in modo quasi costante. Se eseguo un service httpd reload , il numero di processi scende nuovamente a 0 e comincia ad aumentare nuovamente nei prossimi due minuti a ore. Dopo un po ', il registro di Apache mi dice:

     [error] server reached MaxClients setting, consider raising the MaxClients setting 

    Ho fatto questo e ho anche aggiustato altre configurazioni aggiuntive, ma non mi ha aiutato. Non import quale valore MaxClients e ServerLimit sono impostati, Apache non si ferma per spawn nuovi processi httpd fino a questi limiti. Dopo di che, il sito web non è più accessibile.

    Non è stato incrementato il numero di pagine in base agli AWStats. Inoltre, non esiste una singola modifica dell'applicazione PHP. Oltre alla rottura che blocca tutte le richieste dopo 30 minuti, il sito esegue velocemente come al solito. Come soluzione diretta e temporanea, Cron continua a ricaricare Apache mezz'ora.

    Le impostazioni Prefork / Worker sono state le seguenti nel corso degli ultimi 3 anni:

     <IfModule prefork.c> StartServers 4 MinSpareServers 5 MaxSpareServers 10 ServerLimit 128 MaxClients 128 MaxRequestsPerChild 600 </IfModule> <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> 

    Li ho sollevati fino a:

     <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 10 ServerLimit 640 MaxClients 640 MaxRequestsPerChild 1000 </IfModule> <IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> 

    Dopo questa modifica, Apache / HTTP è diventato non disponibile dopo circa 1 ora.

    Come può accadere tutto questo all'improvviso e quali opzioni devo studiare ulteriormente da where deriva questo strano comportmento?

  • / tmp usato 100% where è file?
  • HP DL60 Gen9 non avviato il sistema operativo installato
  • Il servizio "mysqld stop" si spegne (poi ha scoperto che "mysqld morti ma sottoscrizioni bloccati")
  • VSFTPD Imansible impostare le autorizzazioni di scrittura sulla cartella
  • Come avviare in remoto il netinstall di CentOS 7?
  • La direttiva Apache Directory dovrebbe essere relativa al DocumentRoot o less?
  • One Solution collect form web for “Apache genera enormi quantità di processi httpd”

    Pugno, aumentando i parametri prefork peggiorerà solo la tua situazione. Ripristina quindi la configuration precedente.

    Per escludere qualsiasi problema prefork / misconfiguration, tentare di disabilitarlo. La situazione cambia notevolmente? Se è così, trovi il tuo problema.

    In caso contrario, il problema è correlato a fattori esterni: ad esempio, forse alcuni bot / script mirano al tuo sito web, aprendo molte connessioni (con il relativo process httpd). Se questo è il caso, dovresti essere in grado di vedere i file di log di Apache.

    Se ciò non è sufficiente, è ansible triggersre il module mod_status per visualizzare statistiche dettagliate. Quindi, rilasciare apachectl fullstatus per accedere a queste statistiche. Vedere qui e qui per ulteriori dettagli.

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