6 votes

Stabilité d'Apache sur un serveur à TRÈS fort trafic

J'ai donc un client avec un serveur à très haut débit. Les hits qu'il sert sont plutôt légers en termes de demande - jpeg statiques et texte.

SERVER SPECS :

  • Dual Quad-Core L5520 2.26gHz (3.2 Turbo & HT) 8MB cache
  • 72GB Ram
  • 2 SSDs de 300GB (1 dédié à /usr pour suivre la journalisation)
  • port 100Mbps (non mesuré) dans un centre de données très réputé

Apache est actuellement configuré comme suit :

  • Démarrer les serveurs 512
  • Serveurs de rechange minimum 256
  • Nombre maximal de services de secours 512
  • Limite du serveur 7500
  • Nombre maximal de clients : 7500
  • Demandes maximales par enfant 100
  • Délai d'attente Keep-Alive 5
  • Max Keep Alive demande 768
  • Délai d'attente 30

Je voyais environ 2000-3000 accès apache par seconde la semaine dernière sans aucun problème. Cela se traduisait par une vitesse de 80-90 Mbps et une charge d'environ 1 avec des pics autour de 5 et des pics extrêmes momentanés de 30-50 lorsqu'apache redémarrait et que tous les processus étaient relancés. L'utilisation de la mémoire était d'environ 40 Go. Le trafic a augmenté et je vois maintenant 3000-4000 accès d'apache par seconde et le http est instable. Bien qu'apache redémarre occasionnellement, j'obtiens des périodes sans connectivité http alors qu'apache fonctionne et qu'il y a des travailleurs inactifs et des créneaux ouverts. La charge est d'environ 2 lorsqu'elle est stable et monte fréquemment en flèche, ce qui est sans doute dû à mes problèmes de connexion, mais je ne sais pas pourquoi. L'utilisation de la RAM est de 50-60GB. Le débit est d'environ 130Mbps. (Je ne sais pas comment j'arrive à obtenir plus de 100Mbps alors que mon forfait est de 100Mbps mais j'ai un ticket avec le DC pour demander s'ils n'abandonnent pas des paquets à cause de mon utilisation, mais cela n'explique pas mes problèmes de stabilité, à moins que les ack's n'abandonnent et laissent les connexions s'interrompre... peut-être... pas sûr... je n'ai jamais pensé à la théorie derrière cette pensée jusqu'à maintenant).

Je cherche des avis pour savoir si j'ai atteint le maximum opérationnel de ce qu'apache peut gérer ou s'il y a une autre limite système que je pourrais dépasser.

Certaines personnes m'ont dit que LiteSpeed était la solution, mais je n'ai aucune expérience en la matière et mon client a entendu de mauvaises choses, donc les avis sont également appréciés.

Merci à tous !

2 votes

Vous auriez dû passer à nginx il y a des années.

0 votes

Quoi MPM utilisez-vous ?

14voto

voretaq7 Points 78924

Tout d'abord, Apache, nginx ou LightSpeed mis à part, si vous exécutez un serveur avec 2000 à 3000 demandes par seconde, il est temps de commencer à penser à des serveurs doubles et à l'équilibrage des charges. En fonction de ce que vous servez, vous pouvez facilement Vous pouvez obtenir plus d'un de ces serveurs, mais à ces taux, vous servez quelque chose d'important (ou du moins un trafic élevé), vous voulez donc de la redondance en plus de la capacité à gérer les pics de charge momentanés.
Commencez à envisager sérieusement une infrastructure d'équilibrage de charge (il y a beaucoup de questions/réponses sur HAProxy et autres ici, et Google peut aussi vous aider).


Cela dit, je ne pense pas que vous ayez atteint les limites opérationnelles d'Apache.
Vous pouvez certainement envisager d'autres serveurs web performants (nginx est très populaire), ou vous pouvez envisager de régler votre configuration Apache pour de meilleures performances.

Quelques suggestions d'Apache basées sur ce que je vois dans votre question :

Avant de faire quoi que ce soit d'autre, lisez la documentation sur l'optimisation des performances d'Apache .

  1. MaxRequestsPerChild n'est vraiment utile que pour contenir les fuites de ressources.
    100 (votre valeur actuelle) est absolument insensé. Vous faites tourner les processus, ce qui nuit aux performances.
    0 (Ne jamais tuer un enfant) est certainement viable si vous ne fournissez que des ressources statiques.
    10000 (dix mille, la valeur par défaut) convient dans presque toutes les circonstances. 50000 (cinquante mille) est ce que j'utilise pour les sites HTML purement statiques.

  2. StartServers , MinSpareServers y MaxSpareServers peuvent être réglés.
    Je mets généralement StartServers y MinSpareServers à la même valeur.
    S'il existe un nombre minimum spécifique de serveurs de réserve que vous souhaitez conserver, c'est avec ce nombre que vous devez commencer. Une bonne valeur pour cela est votre seuil de connexions actives simultanées.
    MaxSpareServers doit être fixé à 75-80% de votre seuil maximum de connexions actives simultanées.

  3. ServerLimit y MaxClients peut éventuellement être augmenté.
    Si vous avez beaucoup de RAM et de CPU libres, augmentez ces chiffres.
    Si vous êtes proche de la saturation des ressources, laissez-les telles quelles.

  4. Utilice redémarrage en douceur
    Vous dites que vous voyez des "pics extrêmes momentanés" dans votre charge quand Apache redémarre.
    Cela me dit que vous n'utilisez probablement pas de redémarrage en douceur.
    Quelle que soit la cause du redémarrage d'Apache, faites-lui envoyer SIGUSR1 à Apache plutôt qu'à SIGHUP (ou, Dieu nous en préserve, arrêter et démarrer le serveur entier). C'est beaucoup moins abusif et perturbant pour le système qu'un redémarrage régulier d'un arrêt/démarrage complet.

  5. Envisager d'autres MPM
    Vous utilisez très certainement le prefork MPM si vous êtes sur un système Unix.
    Considérez le Travailleur MPM à la place.
    Le réglage pour le MPM ouvrier est un peu différent.

  6. Dépensez un peu cache
    Apache a modules de mise en cache qui peut être utilisé pour conserver en mémoire vive les données auxquelles on accède fréquemment. Cela permet d'éviter un aller-retour vers le disque (ou au moins la couche du système de fichiers) pour les données fréquemment consultées.
    Configuration de supporté par une mémoire La mise en cache peut vous permettre d'améliorer considérablement les performances pour une quantité relativement faible de mémoire.

1 votes

Très bonne réponse. J'ajouterais la suggestion d'utiliser Apache 2.4 avec Event MPM, ce qui lui permettra d'évoluer avec une consommation de ressources plus faible que celle de Worker et est particulièrement bien adapté au service de fichiers statiques à haute performance.

0 votes

@DanielLopez Oui, Apache 2.4 serait un bon choix. Il y a encore quelques obstacles à l'adoption, mais pour servir du contenu statique, cela ne devrait pas poser de problème...

0 votes

@voretaq7 J'ai 15gb ram et un serveur de 31eCPU utilisant apache dans event mpm. J'utilise actuellement 24 serveurs de démarrage, une limite de 100 serveurs et 3000 threads de rechange maximum. Mes analyses montrent 2000 utilisateurs en temps réel. Quelles configurations dois-je utiliser dans event mpm ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X