J'ai une paire de serveurs hébergeant un seul site de commerce électronique Magento avec un trafic modéré (60 000 pages vues par jour rapportées par Google Analytics, je pense que 80 000 signalées sur le serveur lui-même). Le serveur de base de données fonctionne correctement et rapidement, à part un hoquet occasionnel rare, mais le serveur apache est tombé de temps en temps.
J'ai configuré magento pour utiliser la mise en cache PHP recommandée (APC), ainsi que pour conserver ses propres fichiers de cache dans un tmpfs de 1,5 gig (ce tmpfs est régulièrement assez plein, et j'ai un script en cours d'exécution pour effacer les fichiers de cache lorsque le tmpfs est à plus de 80%). Je sers la plupart des images d'Amazon Cloudfront. J'ai récemment configuré nginx comme proxy inverse pour apache (nginx sert également les fichiers statiques). J'ai configuré apache au mieux de mes capacités - keepalives et hostnamelookups sont désactivés et la préfork est configurée comme suit:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Je n'ai pas désactivé les fichiers .htaccess et la journalisation des accès est activée. Je sais que je peux désactiver certains modules. Je ne sais pas quel effet aurait ces trois changements, le cas échéant.
Le serveur apache est un VPS avec 6 gig de RAM. Au moment de l'écriture, le serveur signale load average: 17.77, 18.27, 49.76
, mais il y a environ 2 gig de RAM libre. Quand ça va vraiment mal, la charge passe à 120+ et y reste - le redémarrage d'Apache fait remonter le site et la charge vers le bas.
vmstat
est (alors que le serveur signale la charge ci-dessus), je pense, montrant une valeur d'inactivité du processeur oscillant entre 0 et 70 environ. iostat
affiche une valeur comprise entre 0 et 0,2%.
Je suis un peu coincé. Le peu que je sais me dit que le problème est que le CPU est surchargé en raison de la combinaison du code en cours d'exécution et du nombre d'utilisateurs. Mais je n'ai pas assez d'expérience pour être certain que c'est le problème. Si tel est le problème, je pense que les solutions consistent à améliorer le code ou à diviser le site hébergeant sur deux VPS avec un équilibreur de charge.
Donc, je suppose que mes questions sont:
- Que puis-je faire d'autre pour trouver des problèmes ou des goulots d'étranglement sur le serveur?
- Y a-t-il des changements évidents que je peux apporter à la configuration du serveur pour améliorer cela?
- Est-ce une bonne idée de configurer un système automatisé pour redémarrer apache lorsque la charge dépasse un certain niveau?
- D'après ce qui précède, est-il probable que le site soit devenu trop grand pour le serveur?
Éditer:
J'ai trouvé quelque chose de bizarre - / var / spool / mail / root était grand ... 38 gig. Cela semble ... malsain. Est-ce que cela pourrait être le problème?