Que faire après avoir atteint les 256 connexions max redoutables Apache Limit


9

Après m'être gratté la tête en essayant de comprendre pourquoi mon site répondait si lentement même si les ressources du serveur sont correctes, j'ai finalement vérifié l'état d'Apache et trouvé:

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

Il semble que mon apache soit littéralement au maximum avec les connexions. Quiconque essaie de visiter mon site est mis sur une "liste d'attente" jusqu'à ce qu'Apache soit de nouveau libre.

Il semble que j'ai deux options.

A) Augmentez la limite maximale de connexions au-dessus de 256. Bien que selon cet article, ce ne soit pas si facile:

Par défaut, le paramètre MaxClients a une limite matérielle compilée de 256. Cela peut cependant être modifié en recompilant Apache. Certaines distributions ou sociétés d'hébergement élèvent cette limite à une valeur très élevée, comme 512 ou même 1024 afin de faire face à des charges importantes.

B) Localisez les scripts qui prennent trop de temps. Cela me semble beaucoup plus délicat, car la plupart des processus apache apparaissent et disparaissent à nouveau. De plus, les scripts PHP de mes sites sont assez bien optimisés ... et encore une fois, les ressources du serveur sont très bien:

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)

Quelle option (si l'une d'entre elles) dois-je choisir et comment dois-je la faire?

ÉDITER

Plus d'informations: Version du serveur: 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

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

Exemple de demande Parital: http://pastebin.com/vzUVDMPR

Basculez Text-Wrap si les bacs de collage apparaissent bizarres.


L'article que vous avez cité a environ 6 ans. Modifications logicielles. Voir la réponse de Shane.
Chris S

1
@ChrisS Encore plus obsolète - la limite compilée était une chose 1.x (2.0 est sorti en 2002), et l'article établit même un lien explicite avec les documents 2.0.
Shane Madden

Réponses:


10

Cet article est inexact; MaxClientspeut être élevé au-dessus de 256 lors de l'utilisation du MPM préfork (c'est ce que je suppose que vous utilisez actuellement en fonction de votre description du problème). De la documentation :

Pour les serveurs non filetés (c'est-à-dire préfork), se MaxClientstraduit par le nombre maximal de processus enfants qui seront lancés pour répondre aux demandes. La valeur par défaut est 256; pour l'augmenter, vous devez aussi augmenter ServerLimit.

ServerLimitest celui qui a la limite compilée en dur, mais c'est bien passé où vous devriez jamais atteindre sans que votre serveur ne rencontre un autre goulot d'étranglement. Documentation :

Il existe une limite ServerLimit 20000stricte de compilation dans le serveur (pour la préfork MPM 200000). Ceci est destiné à éviter les effets désagréables causés par les fautes de frappe.

Donc, si vous souhaitez augmenter la limite de votre client à quelque chose comme 512, alors:

MaxClients 512
ServerLimit 512

Vous devriez également regarder quel MPM vous utilisez, car les MPM autres que prefork sont mieux adaptés à l'échelle. Voir ici pour plus d'informations.


Je vois core.c et worker.c s'exécuter httpd -l. Je suppose que cela signifie que j'exécute MPM travailleur?
kmoney12

@hellohellosharp En effet - dans ce cas, vous voulez régler éventuellement votre MaxClients, ServerLimit, ThreadsPerChildet ThreadLimit. Pouvez-vous fournir votre configuration de travailleur actuelle httpd.conf?
Shane Madden

Oui ... y a-t-il un danger à publier cela publiquement? Espérons que non, le voici: pastebin.com/yBeLt6mP
kmoney12

Non, aucun problème pour publier la plupart des fichiers httpd.conf. Assurez-vous simplement que vous n'avez pas quelque chose d'étrange comme des commentaires avec des mots de passe / noms d'utilisateur / etc. Ceux-ci se glissent parfois dans les sections de configuration du proxy et similaires. Beaucoup de gens aiment aussi éditer les IP et les noms de domaine, juste pour ne pas attirer l'attention
Chris S

1
le module d'état peut vous montrer ces détails.
ETL

-1

Je suggère que vous utilisiez un proxy inverse, quelque chose comme nginx ou lighttpd peut gérer beaucoup plus de connexions qu'apache. Selon la façon dont vos sites utilisent htaccess, vous pouvez également utiliser nginx / lighttpd avec fcgi et renoncer complètement à apache.


4
Vraiment?? Il doit ajouter deux lignes de configuration httpd.confet votre solution consiste à extraire la plupart des logiciels qu'il exécute et à les remplacer?! Chaque logiciel a ses problèmes, mais une mauvaise utilisation non instruite aggrave les problèmes.
Chris S

En fin de compte, nginx peut gérer des connexions plus actives, c'est à l'OP de décider quoi utiliser, je proposais simplement ma suggestion.
Shoshomiga
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.