Question

Nous utilisons actuellement Apache 2.2.3 et Tomcat 5 (intégré dans JBoss 4.2.2) en utilisant mod_proxy_jk comme connecteur.

Quelqu'un peut-il nous éclairer sur la manière correcte de calculer / configurer les valeurs ci-dessous (ainsi que sur tout autre élément pertinent). Apache et Tomcat s'exécutent tous deux sur des machines distinctes et disposent d'une quantité importante de RAM (4 Go chacun).

Parties serveur.xml pertinentes:

<Connector port="8009"
           address="${jboss.bind.address}"
           protocol="AJP/1.3"
           emptySessionPath="true"
           enableLookups="false"
           redirectPort="8443"
           maxThreads="320"
           connectionTimeout="45000"
    />

Parties httpd.conf pertinentes:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
Était-ce utile?

La solution

Vous devez tenir compte de la charge de travail des serveurs.

Le facteur le plus important pourrait être le nombre de clients connectés simultanément aux heures de pointe. Essayez de le déterminer et réglez vos paramètres de manière à ce que:

  • Apache et Tomcat disposent de suffisamment de threads de traitement pour ne pas avoir à générer de nouveaux threads lorsque le serveur est lourdement chargé
  • il n’ya pas beaucoup plus de threads de traitement dans les serveurs que nécessaire car ils gaspilleraient des ressources.

Avec ce type de configuration, vous pouvez réduire les coûts de maintenance interne des serveurs, ce qui peut être très utile, notamment lorsque votre charge de travail est sporadique.

Par exemple, considérons une application dans laquelle vous avez environ 300 nouvelles demandes / seconde. Chaque demande nécessite en moyenne 2,5 secondes pour être traitée. Cela signifie qu’à tout moment, vous avez environ 750 demandes à traiter simultanément. Dans cette situation, vous souhaiterez probablement ajuster vos serveurs de manière à ce qu’ils disposent d’environ 750 unités de traitement au démarrage et d’ajouter au maximum environ 1 000 unités de traitement pour gérer des charges extrêmement élevées.

Tenez également compte de la raison pour laquelle vous avez besoin d’un fil de discussion. Dans l'exemple précédent, chaque demande était indépendante des autres, aucun suivi de session n'était utilisé. Dans une version plus "web-ish" Dans certains cas, des utilisateurs peuvent être connectés à votre site Web et, selon le logiciel utilisé, Apache et / ou Tomcat peuvent être amenés à utiliser le même fil pour répondre aux demandes présentées au cours d’une session. Dans ce cas, vous aurez peut-être besoin de plus de threads. Cependant, comme je connais au moins Tomcat, vous n’avez pas vraiment besoin de tenir compte de cela car cela fonctionne de toute façon avec les pools de threads en interne.

Autres conseils

MaxClients

Il s’agit de la limite fondamentale des connexions clientes parallèles qu’Apache devrait gérer immédiatement.

Avec prefork, une seule demande peut être traitée par processus. Par conséquent, apache dans son ensemble peut traiter au plus $ MaxClients dans le temps nécessaire pour traiter une demande unique . Bien entendu, ce maximum idéal ne peut être atteint que si l'application nécessite moins de 1 / $ de ressources MaxClients par requête.

Si, par exemple, l'application met une seconde de temps CPU à répondre à une seule requête, définir MaxClients sur quatre limitera votre débit à quatre requêtes par seconde: chaque requête utilise une connexion Apache et Apache ne gère que quatre à la fois. Mais si le serveur n’a que deux processeurs, il est impossible d’atteindre ce résultat, car chaque seconde d’une horloge murale n’a que deux processeurs, mais les requêtes nécessitent quatre processeurs.

MinSpareServers

Ceci indique à Apache combien de processus inactifs doivent traîner. Plus ce nombre est élevé, plus Apache peut absorber plus de charge en rafale avant de devoir générer des processus supplémentaires, ce qui est coûteux et ralentit donc la demande en cours.

Le réglage correct de cela dépend de votre charge de travail. Si vous avez des pages avec de nombreuses sous-requêtes (images, iframes, javascript, css), alors frapper une seule page peut utiliser de nombreux processus en très peu de temps.

MaxSpareServers

Le fait d'avoir trop de processus apache inutilisés traînant à la mémoire gaspille de la mémoire. Apache utilise donc le nombre MaxSpareServers pour limiter le nombre de processus en réserve qu'il garde en réserve pour les rafales de demandes.

MaxRequestsPerChild

Cela limite le nombre de demandes qu'un processus unique gérera tout au long de sa vie. Si vous êtes très préoccupé par la stabilité, vous devez définir ici une limite afin de recycler en permanence les processus apache afin d'éviter que des fuites de ressources n'affectent le système.

StartServers

Il s’agit simplement du nombre de processus que Apache démarre par défaut. Définissez la quantité habituelle de processus Apache en cours pour réduire le temps de préchauffage de votre système. Même si vous ignorez ce paramètre, Apache utilisera les valeurs Min- / MaxSpareServers pour générer de nouveaux processus, si nécessaire.

Plus d'informations

Voir aussi la documentation sur les modules de traitement multiple d'Apache . / p>

Les paramètres par défaut sont généralement des points de départ décents pour voir ce dont vos applications auront réellement besoin. Je ne sais pas combien de trafic vous attendez, il est donc un peu difficile de deviner ce que sont les MaxThreads, MaxClients et MaxServers. Je peux vous dire que la plupart des clients avec lesquels je traite (travailler pour un hôte Web Linux, qui traite principalement avec des clients exécutant des applications Java dans Tomcat) utilisent les paramètres par défaut pendant un bon bout de temps sans trop d'ajustements.

Si vous ne vous attendez pas à un trafic important, ces paramètres sont "trop ??élevés". vraiment ne devrait pas trop vous affecter non plus. Apache n'allouera pas de ressources pour les 256 clients potentiels, à moins que cela ne devienne nécessaire. Il en va de même pour Tomcat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top