Question

Je travaille sur une application web PHP qui permettent à des utilisateurs du réseau les uns avec les autres, de réserver des événements, et le message eachother.Il n'y a qu'à environ 100 utilisateurs.

J'ai configuré l'application sur un VPS avec Ubuntu 9.10, apache2, mysql 5 et php 5.J'avais 360 Mo de RAM, mais mis à niveau vers 720 MO.

Dernièrement, mon application web a connu des pannes en raison de l'utilisation excessive de mémoire.À partir de ce que je peux dire dans les journaux d'erreur, il semble que le serveur automatiquement tue les processus apache qui consomment trop de mémoire.En conséquence, j'ai mis à jour la mémoire de 360 MO de 720 MO comme une solution de mesure.

Donc ma question est, comment puis-je aller sur la résolution de panne de ces questions?Comment puis-je savoir si mon site est besoin de plus de mémoire est due à un mauvais code ou si elle fait partie du site naturel de la croissance?Quel est le moyen le plus efficace pour déterminer les scripts PHP qui consomment le plus de mémoire?

Était-ce utile?

La solution

Il n'y a pas de réponse simple à cela, bien que je soupçonne qu'il pourrait un problème dans votre code.

Qu'est-ce que le paramètre memory_limit dans votre php.fichier ini?En général, je recommande au moins 4 mo, et habituellement de 16.Combien simultanées hits vous fielding?Le site est-il en faisant beaucoup de lourde les rapports de stats?Ou le rendu des images via PHP?Pensez-vous utiliser file_get_contents() n'importe où?

Vous avez vraiment besoin de mettre en place certains de journalisation personnalisé de rapport pour chaque URL, la taille du fichier journal à la sortie.par exemplevous pourriez auto-prepend:

<?php
register_shutdown_function('log_mem');

function log_mem()
{
   fputs(STDERR, '[' . date('c') . '] ' . memory_get_usage() . ' ' 
     . $_SERVER["REQUEST_URI"] . "\n");
}

(Remarque: pas de balise de fermeture) Ceci va écrire la mémoire utilisée par chaque page PHP pour le error_log de sorte que vous pouvez isoler le problème plus facilement.

HTH

C.

Autres conseils

Une autre chose que vous pouvez faire si votre processus est petit est de tourner vers le bas de votre httpd les réglages min serveurs de rechange de 1, max et les serveurs de rechange de 3.Si vous avez seulement 100 utilisateurs, ce devrait être bon, comme vous ne se soucient pas de la surcharge de démarrage des processus pour seulement un petit nombre d'utilisateurs.

Voici un outil qui prend en charge le profilage PHP: http://xdebug.org/docs/profiler

Selon la version de votre httpd & php, httpd pourraient détenir sur les segments de mémoire qu'il n'en a pas besoin, et la croissance des processus en cours d'exécution de taille inutilement.J'ai une boîte qui fait cela, et j'ai résolu le problème en faisant une httpd restart sur une base tous les soirs de la sorte:

30 00 * * *     /httpd/sbin/apachectl restart
31 00 * * *     /httpd/sbin/apachectl start
35 00 * * *     /httpd/sbin/apachectl start
40 00 * * *     /httpd/sbin/apachectl start

Comme vous pouvez le voir, j'ai suivi mon redémarrer avec 3 de fuite commence, juste au cas où apache ne parvient pas à revenir à la vie après le redémarrage.3 est probablement excessif, mais d'un autre côté, il ne fait pas de mal n'importe quoi, alors pourquoi pas.

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