Depuis ma question est de plus en plus longues et de plus, je décide de ré-écrire toute la question pour l'améliorer et le rendre plus court.
Je lance mon site internet sur serveur dédié avec 8 go de mémoire. Je suis pleinement conscient que je dois augmenter la limite de mémoire php.paramètre ini. J'ai mis de 128M de 256M et à -1. Toujours le problème de la persistance.
Fatal error: Out of memory (alloués 786432) (tried to allocate 24576 octets) D:\www\football\views\main.php sur la ligne 81
La mémoire n'a pas de sens car il dit seulement 786432 octets est alloué et il fallait 24576 octets de plus.
786432 octets est seulement 768 kilo-octets et est assez petit.
Conseils
- L'erreur se produit sur une ligne aléatoire. Il n'est pas toujours l'erreur sur la ligne numéro 81.
- À l'heure de pointe, Apache prend seulement environ 500 mo de mémoire. J'ai encore 6 GO de rechange.
- Il n'y a pas de boucle infinie.
- Le script prend 1,042,424 octets. L'obtention de ce numéro,
echo memory_get_peak_usage();
- Le jeu de résultats de MySQL est faible (au plus 12 de lignes, purement texte, pas de données blob)
- (Important) Si je redémarre Apache une fois tous les deux jours, l'erreur a disparu. Il se produit généralement lors de l'exécution d'Apache plus de 2 jours.
- J'ai inclus le profilage le script et vous pouvez l'obtenir ici.
- Ce serveur dédié est purement utilisée pour exécuter un seul site web. Ce site est un haut trafic de site web avec une moyenne de 1000 visiteurs chaque minute. À l'heure de pointe, il y aura de 1 700 à 2 000 visiteurs d'accéder en même temps.
Serveur Spec
Système d'exploitation: Windows 2008 R2 64-Bit
PROCESSEUR: Intel Core i5 - 4 cœurs
RAM: 8 GO
Apache 2.2
PHP 5.3.1
Stockage: 2 x 1 to disques durs
Bande passante: 10 to par mois
Solution
J'ai enfin réglé et résolu le problème et je tiens à partager ici ce que j'ai fait pour l'améliorer:
-
favicon.ico
était manquant, qui mess avec mon trajet moteur. Bien que mon trajet moteur est très faible, mais en yfavicon.ico
, elle permet de réduire l'utilisation de la mémoire en n'exécutant pas de route à moteur. La plupart de la partie de mon site web a, et j'ai oublié de le mettre pour cette nouvelle section. -
Limiter
MaxRequestPerChild
aide. Dans mon autre serveur dédié, j'ai monMaxRequestPerChild
limitée. Pour ce serveur, je l'ai mis à 0. J'ai toujours pensé que chaque script est isolé. Disons que si mon script prend 800ko à exécuter. Dès son achèvement, Apache ou de PHP doit gratuit de 800 ko de mémoire. Il semble qu'il ne fonctionne pas de cette façon. LimitedMaxRequestPerChild
aide à prévenir la fuite de mémoire par la création de nouveaux processus après limitedMaxRequestPerChild
et l'ancien processus est en train de mourir. C'est mon nouveau réglage.ThreadsPerChild 1500 MaxRequestsPerChild 10000
ob_flush();
fait de réduire un peu plus de mémoire. Il n'aide pas beaucoup, mais tous les bits de l'optimisation de l'aide.- Je l'ai utilisé,
xdebug
que je n'ai jamais utilisé avant comme suggéré par des gens qui tentent de répondre à cette question. Je dois dire que c'est l'outil idéal et j'ai optimisé un peu fourre pour le faire courir un peu plus vite. - J'ai désactiver un peu inutile module Apache. Je suis en train de le désactiver un par un et de le laisser quelques jours de test pour s'assurer qu'il fonctionne parfaitement avant que je désactiver un autre. J'ai tous inutiles extension PHP désactiver maintenant.
- La plupart de mes script dans ce serveur utilisé de façon traditionnelle (pas de modèle, pas de couche de base de données, pur PHP, HTML, et l'héritage mysql_* fonction). Pour être honnête, il est très rapide et extrêmement petite mémoire. Toutefois, l'entretien, le script n'est pas très facile car le site est de plus en plus longues. J'ai essayé de convertir certaines parties du site dans un cadre approprié (mon petit cadre). La raison que j'ai utilisé mon propre cadre de référence, car il est tout petit (3 ko pour l'ensemble du cadre et ne comprennent que ce dont j'ai besoin).
- Commutation de IIS7.5 la résolution de ce problème complètement.