3 votes

Optimiser les performances d'Apache

Je cherche des moyens d'optimiser notre serveur web actuel hébergé en interne. J'essaie de fournir autant pertinent informations ci-dessous. Veuillez me faire savoir si vous avez besoin d'informations supplémentaires afin de pouvoir vous aider.

Le serveur gère un seul site web, qui est une plateforme de commande de pizzas en ligne construite sur Zend Framework (ver1). Les statistiques de trafic du mois dernier font état d'environ 6 000 pages par jour, principalement à l'heure du dîner. Environ 1500 chargements/heure en pointe pendant cette période.

Nous sommes récemment passés d'une ligne aDSL 2/2mbit à une fibre 100/100mbit, et nous avons toujours des problèmes de performance au moment du dîner. Nous avons supposé que le 2mbit était le problème. Le site Web est assez rapide dans les périodes de faible charge.

Matériel informatique

CPU: Intel(R) Xeon(R) CPU            5160  @ 3.00GHz (3000.13-MHz K8-class CPU)

Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)

Filesystem   Type     Size    Used   Avail Capacity  Mounted on
/dev/ad7s1a  ufs      4.8G    768M    3.7G    17%    /
devfs        devfs    1.0K    1.0K      0B   100%    /dev
/dev/ad7s1g  ufs      176G    5.2G    157G     3%    /home
/dev/ad7s1e  ufs      4.8G    2.8M    4.5G     0%    /tmp
/dev/ad7s1f  ufs       19G    3.5G     14G    19%    /usr
/dev/ad7s1d  ufs      4.8G    550M    3.9G    12%    /var

Système d'exploitation du serveur

FreeBSD 8.2-RELEASE

Logiciel

apache-2.2.17
php5-5.3.8
mysql-server-5.5

Empreinte d'Apache (exemple, tiré de # top)

31140 www              1  45    0   377M 41588K lockf   2   0:00  0.00% httpd
31122 www              1  44    0   375M 35416K lockf   2   0:00  0.00% httpd
31109 www              1  44    0   375M 38188K lockf   2   0:00  0.00% httpd
31113 www              1  44    0   375M 35188K lockf   2   0:00  0.00% httpd

Apache utilise le MPM prefork, APC (Alternative PHP Cache). Le module SSL est chargé, mais n'est pas utilisé (c'est-à-dire qu'il ne fonctionne pas vraiment, et n'est donc pas utilisé). Il existe un fichier contenant les paramètres des modules MPM, mais comme je le vois, il n'est pas inclus dans le fichier httpd.conf, la ligne include est commentée. Je suppose donc que le module MPM prefork fonctionne également avec des valeurs par défaut.

Voici quelques autres valeurs de conf Apache que j'ai trouvées - qui sont incluses dans https.conf

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

Chargement en cas de problèmes de performance

enter image description here

Remarque : les requêtes API vers le backend

Quant à notre plateforme en ligne, elle communique avec notre système backend via une API (GET/POST). Pour les devis sur les paniers (mis en cache jusqu'à ce qu'un nouvel article soit ajouté), les produits (mis en cache), les prix sur les produits (mis en cache). Et le serveur dorsal montre une charge réelle lorsque des problèmes de performance apparaissent sur le web. J'en déduis donc que ce sont les requêtes API qui prennent un temps fou pour être complétées, retardant ainsi les clients sur le serveur web. Ma question est donc la suivante : les statistiques données ci-dessus (trafic/charge) et la configuration actuelle du logiciel sont-elles comparées aux spécifications de l'API ? Par rapport aux spécifications de la connexion internet et du matériel, est-ce que ce sont les signes d'un serveur stressé ? Et serais-je en mesure d'augmenter le nombre maximum de clients sur le serveur web, en fonction des ressources disponibles et de l'empreinte réelle d'Apache ?

1voto

Les performances des sites Web sont un vaste sujet. D'après ce que je vois, le problème n'est probablement pas Apache.

Il existe cependant quelques éléments qui peuvent vous aider à améliorer vos performances.

  • Caching ! Je ne sais pas combien vous mettez en cache dans votre code PHP. Mais comme vous n'utilisez pas de SSL et que vous avez beaucoup de données en lecture seule, essayez de Vernis

  • Activer mod_expires

  • Profilez votre site web/API dorsale avec JMeter

0voto

adaptr Points 16431

Non, les éléments ci-dessus ne sont pas des signes d'un serveur stressé.

Bien que vous puissiez être confronté à une saturation du réseau d'E/S (puisque vous ne fournissez aucune donnée réelle à ce sujet), cela est extrêmement improbable avec si peu de demandes réelles pendant les heures de pointe.

Vous devez effectuer des tests sur le backend HTTP pour voir s'il fonctionne à sa capacité maximale. Si c'est le cas, vous devez corriger CELA.

Pour toute référence future, vous devriez configurer et utiliser l'option statut du serveur pour surveiller apache, comme documenté ici : http://httpd.apache.org/docs/2.2/mod/mod_status.html

0voto

Carles Sentis Points 193

Les performances d'Apache peuvent être modifiées grâce aux paramètres de Worker MPM et de Prefork, en modifiant les paramètres keepalive et max spare threads, ce qui permet d'augmenter les performances et de consommer moins de mémoire. Vous pouvez trouver les paramètres optimaux pour Prefork et Worker à partir de ici

-2voto

AngerClown Points 320

Il se peut que vous soyez à court de processus (défini par MaxSpareServers y StartServers ). La valeur par défaut est seulement de 10, donc si vos temps de réponse sont élevés, cela peut ne pas être suffisant pour une requête toutes les 2 secondes (1500 / heure).

Allumez le server-status pour surveiller les processus en cours d'utilisation. Veillez à définir des règles d'accès pour qu'il ne soit accessible qu'en interne.

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