Cosa fare dopo aver colpito le temute 256 connessioni massime Apache Limit


9

Dopo essermi grattato la testa cercando di capire perché il mio sito stava rispondendo così lentamente anche se le risorse del server sono a posto, ho finalmente controllato lo stato di Apache e ho trovato:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers

Sembra che il mio apache sia letteralmente al massimo con connessioni. Chiunque provi a visitare il mio sito viene inserito in una "lista di attesa" fino a quando Apache non è nuovamente libero.

Sembra che ho due opzioni.

A) Aumentare il limite massimo di connessioni al di sopra di 256. Sebbene in questo articolo non sia così semplice:

Per impostazione predefinita, il parametro MaxClients ha un limite fisso di 256. Questo può essere modificato ricompilando Apache. Alcune distribuzioni o società di hosting elevano questo limite a un valore molto elevato, come 512 o addirittura 1024 per far fronte a grandi carichi.

B) Individua gli script che impiegano troppo tempo. Questo mi sembra molto più complicato, dal momento che la maggior parte dei processi di apache appaiono e scompaiono di nuovo. Inoltre, gli script PHP dei miei siti sono ottimizzati abbastanza bene ... e ancora una volta, le risorse del server vanno bene:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)

Quale opzione (se una delle due) dovrei scegliere e come dovrei farlo?

MODIFICARE

Ulteriori informazioni: Versione server: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635

Configurazione HTTP: http://pastebin.com/yBeLt6mP

Esempio di richiesta parentale: http://pastebin.com/vzUVDMPR

Attiva / disattiva l'involucro del testo se i raccoglitori di pasta vengono visualizzati in modo strano.


L'articolo che hai citato ha ~ 6 anni. Modifiche al software. Vedi la risposta di Shane.
Chris S,

1
@ChrisS Ancora più obsoleto: il limite compilato era una cosa 1.x (2.0 è uscito nel 2002) e l'articolo si collega anche esplicitamente ai documenti 2.0.
Shane Madden,

Risposte:


10

Quell'articolo non è preciso; MaxClientspuò essere aumentato oltre 256 quando si utilizza il prefork MPM (che è quello che presumo tu stia utilizzando attualmente in base alla descrizione del problema). Dalla documentazione :

Per i server senza thread (ovvero prefork), si MaxClientstraduce nel numero massimo di processi figlio che verranno avviati per soddisfare le richieste. Il valore predefinito è 256; per aumentarlo, devi anche rilanciare ServerLimit.

ServerLimitè quello che ha il limite prestabilito, ma è passato oltre il punto in cui dovresti mai arrivare senza che il tuo server si imbatterà in qualche altro collo di bottiglia. Documentazione :

Esiste un limite rigido di ServerLimit 20000compilazione nel server (per prefork MPM 200000). Questo ha lo scopo di evitare i cattivi effetti causati dai refusi.

Quindi, se vuoi aumentare il limite del tuo client a qualcosa come 512, allora:

MaxClients 512
ServerLimit 512

Dovresti anche dare un'occhiata a quale MPM stai usando, in quanto MPM diversi da prefork sono migliori per la scala. Vedi qui per maggiori informazioni.


Vedo core.c e worker.c in esecuzione httpd -l. Immagino che ciò significhi che sto eseguendo MPM lavoratore?
kmoney12,

@hellohellosharp Infatti - in questo caso, ti consigliamo di modificare il vostro potenzialmente MaxClients, ServerLimit, ThreadsPerChild, e ThreadLimit. Potete fornire la vostra attuale configurazione di lavoro da httpd.conf?
Shane Madden,

Sì ... c'è qualche pericolo nel pubblicarlo pubblicamente? Speriamo di no, eccolo qui: pastebin.com/yBeLt6mP
kmoney12

No, nessun problema nella pubblicazione della maggior parte dei file httpd.conf. Assicurati solo di non avere qualcosa di strano come i commenti con password / nomi utente / ecc. Questi a volte si insinuano nelle sezioni di configurazione del proxy e simili. Molte persone amano modificare anche i nomi IP e di dominio, solo per non attirare l'attenzione
Chris S

1
il modulo di stato può mostrarti questi dettagli.
ETL

-1

Suggerirei di usare un proxy inverso, qualcosa come nginx o lighttpd può gestire molte più connessioni di apache. A seconda di come i tuoi siti utilizzano htaccess, puoi anche utilizzare nginx / lighttpd con fcgi e rinunciare completamente ad apache.


4
Veramente?? Deve aggiungere due linee di configurazione httpd.confe la tua soluzione è quella di estrarre la maggior parte del software che ha in esecuzione e sostituirlo ?! Ogni pezzo di software ha i suoi problemi, ma un uso improprio non istruito causa problemi peggiori.
Chris S,

Alla fine nginx è in grado di gestire connessioni più attive, spetta all'OP decidere cosa usare, stavo solo avanzando il mio suggerimento.
Shoshomiga,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.