J'utilise Cadedigniter Cadre (version de développement de GitHub) pour l'un de mes projets. Le projet lui-même n'est pas grand que quelques contrôleurs et modèles et j'ai une fuite de mémoire. En 12 heures, mes béliers montaient constamment et je dois redémarrer PHP5-FPM pour les nettoyer. Où devrais-je commencer à chercher une fuite de mémoire? Je veux dire, c'est que c'est des boucles ou des variables et quels outils puis-je utiliser pour cela pour enquêter? P>
3 Réponses :
Une très ancienne question, mais pour ceux qui sont confrontés à ce problème (car cela pose encore un problème pour certains d'entre nous à l'aide de CodeDigniter) ... par le développeur: Par défaut, Compleigniter conserve un tableau contenant votre historique de requêtes. p>
regarder dans réglage sauvegarde_queries code> à
dans votre base de données Configuration. P>
false code>
J'ai eu le même problème avec un projet de travail et cela a considérablement réduit notre utilisation de la mémoire. P>
Si vous avez besoin de trouver la cause exacte de votre fuite de mémoire, je vous suggère d'utiliser un profileur de mémoire comme XHProf. p>
C'est la meilleure façon de déboguer les scripts PHP et quelle est la cause de la fuite de mémoire. p>
Cherchez: P>
1) emplois cron p>
2) des requêtes en utilisant '*', et p>
3) requêtes qui utilisent des tables sans index. p>
4) Spécialement, de longues requêtes non optimisées. Ce sont des requêtes avec beaucoup de sous-éléments, par exemple. p>
5) Exécutez ces questions avec une déclaration d'explication et découvrez quelles tables doivent être optimisées. Lire ici comment utiliser Expliquer: Utiliser Expliquer p>
Vous devriez installer quelque chose comme nouvelle relique sur votre serveur / application, il a un mode de niveau libre qui peut vous aider à localiser des requêtes et des processus longs. p>
Maintenant, je vous suppose qu'il n'y a pas de traitement majeur que vous faites et que vous ne nous avez pas dit, par exemple, de longues listes de traitement de l'image. p>
qui pourrait tuer une bête d'une machine s'il est désopiné. p>
N'oubliez pas que les longues boucles peuvent également être une fuite de mémoire. Si c'est votre cas, vous pourriez expérimenter de passer des boucles pour les boucles pour les boucles, par exemple. P>
Lisez ceci alors question: Stackoverflow.com/Questtions/18524984 / ...
J'ai utilisé Valgrind et j'ai constaté que des fuite de mémoire existent dans mon CMS "en cours d'utilisation à la sortie: 93 364 octets dans 1 447 blocs" La question est de savoir comment obtenir plus de détails sur étaient la fuite de mémoire utilisant Valgrind? Parce que maintenant, je viens de voir l'adresse dans PHP Levencesor à 0x4c28bed: Malloc (vg_replace_malloc.c: 263)
Avez-vous essayé la réponse de Kungphu?
Pourquoi utilisez-vous une copie de développement de CI? et quelle version de CI utilisez-vous? 2 ou 3?