Je travaille sur une application Web PHP qui permettent aux utilisateurs de réseauter les uns avec les autres, des événements de livres et des messages. Il n'y a que 100 utilisateurs environ. P>
I Configurez l'application sur un VPS avec Ubuntu 9.10, Apache2, MySQL 5 et PHP 5. J'avais 360 Mo de RAM, mais améliorée à 720 Mo. P>
Dernièrement, mon application Web a connu des pannes en raison d'une utilisation excessive de la mémoire. D'après ce que je peux dire dans les journaux d'erreur, il semble que le serveur tue automatiquement les processus Apache qui consomment trop de mémoire. En conséquence, j'ai mis à niveau la mémoire de 360 Mo à 720 Mo comme mesure d'arrêt-gap. P>
Donc, ma question est de savoir comment résoudre ces problèmes de panne? Comment savoir si le besoin de mon site Web pour plus de mémoire est dû à un code médiocre ou s'il fait partie de la croissance naturelle du site Web? Quel est le moyen le plus efficace de déterminer quels scripts PHP consomment le plus de mémoire? P>
4 Réponses :
Voici un outil qui prend en charge le profilage PHP: http://xdebug.org/docs/profiler p>
Selon votre version de httpd & php, httpd pourrait tenir des segments de mémoire dont il n'a pas besoin et de la croissance inutilement de la taille d'exécution inutilement. J'ai une boîte qui fait cela, et j'ai résolu le problème en faisant un redémarrage httpd sur une base nocturne, comme: Comme vous pouvez le constater, je suis de suite mon redémarrage avec 3 Le trailing commence, juste au cas où Apache ne revenait pas à la vie après le redémarrage. 3 est probablement trop exclu, mais d'autre part, cela ne fait rien de mal, alors pourquoi pas. P> p>
Je ne sais pas pourquoi cela devient bullevé, beaucoup de gens ont signalé une fuite de mémoire lorsque vous utilisez une pile de lampe: Google.com/... ne signifie pas que c'est la mémoire de fuites httpd , il peut aussi facilement être une bibliothèque qui est appelée à l'intérieur de PHP. Cela ne nie pas le fait que c'est le processus httpd que la mémoire sera attribuée à ...
En outre, il est I> possible que je reçois un processus qui ne meure pas pendant la période de temps que le redémarrage tente d'apporter Apache Sauvegarder. Plus spécifiquement, j'ai eu Apache mourir pendant une période de minuit gracieuse, en raison d'un processus prenant une quantité de temps exorbitante à mourir. Encore une fois, si vous allez en savoir plus, j'apprécierais une raison pour laquelle, ou du moins une meilleure façon de faire les choses ...
Il est en train de descendre car ce n'est pas une solution c'est une solution de contournement. Il y a beaucoup d'endroits où chercher de telles fuites - qui sont très peu susceptibles d'être quelque chose à voir avec le problème rapporté où le tas Zvar se remplit.
La question est la suivante: "Comment puis-je faire de la résolution de ces problèmes de panne?" Cela peut ne pas être le meilleur moyen, mais c'est une façon de récupérer la future mem. C'est comme dire bande de conduits sur un tuyau de radiateur n'est pas une réparation, c'est une solution de contournement. Aller de l'avant et transpirer à mort dans le désert et refuser d'utiliser la bande de conduits alors.
Une autre chose que vous pouvez effectuer si la taille de votre processus est petite est petite de vos paramètres httpd pour avoir des serveurs de rechange Min de 1, et des serveurs de rechange maximum de 3. Si vous n'avez que 100 utilisateurs, cela devrait aller, car vous gagnez Je me soucie de la surcharge des processus de départ pour seulement quelques utilisateurs. P>
Il n'y a pas de réponse simple à cela, bien que je soupçonne que cela puisse un problème dans votre code.
Quel est le paramètre Memory_Limit dans votre fichier php.ini? En règle générale, je recommanderais au moins 4 Mo, et généralement 16. Combien de hits concurrents êtes-vous en train de fumer? Le site fait-il beaucoup de fortes rapports de statistiques? Ou rendu des images via php? Utilisez-vous fichier_get_contents () n'importe où? P>
Vous devez vraiment configurer une journalisation personnalisée pour signaler pour chaque URL, la taille du fichier journal à la sortie. par exemple. Vous pouvez préparer automatiquement: p> (note - aucune étiquette de fermeture)
Cela écrira la mémoire utilisée par chaque page PHP à l'erreur_log afin que vous puissiez isoler le problème plus facilement. P> hth p> c. P> p> p>
Obtenir ceci: "Avertissement: FLPTS () s'attend à ce que le paramètre 1 soit une ressource, une chaîne donnée ..."
Vous n'avez que 720 Mo de mémoire? Vous devriez envisager d'obtenir plus de RAM. Vous n'utilisez pas de logiciel il y a 10 ans.
Combien de mémoire devrais-je avoir au moins?
@ GhostDog74: Il utilise un VPS, qui est un serveur virtuel où vous payez généralement tous les mois pour les ressources de disque et de mémoire.
La quantité de mémoire que vous devriez avoir IMHO est la taille du processus Apache * Nombre de processus concurrents + 10% + utilisation de la mémoire de base.