|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() |
Bonjour à tous,
Pour un client je dois réaliser une tache symfony dont voici les grandes lignes: - parser un fichier XML à l'aide de SAX et placer le résultat dans un tableau - parcourir le tableau afin de créer des objets symfony correspondant au model. Sur le serveur de dev tout fonctionne parfaitement, par contre sur le serveur de test la mémoire ne semble pas se vider correctement à chaque tour de boucle du tableau. Pour mieux visualiser ce qui se passe --> ici Les 2 serveurs tournent sous Debian 6.0, les versions de phps sont identiques: PHP 5.3.3-7+squeeze3. Les scripts PHP executés sur les 2machines sont identiques, etc ... Les configurations de symfony sont aussi identiques. Moi et mes collègues ne savont plus ou chercher pour comprendre pourquoi dans un cas cela fonctionne et pas dans l'autre. Si vous aviez des suggestions de verifications à effectuer je suis tout ouïe!! N'hésitez pas à me demander d'éclaircir certains points si nécessaire. Merci d'avance aux courageux pour leur aide
__________________
Linux because rebooting is just for adding medias |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
montre ton code
__________________
http://blog.stealth35.com/ |
|
|
10
|
|
|
#3 |
|
Membre chevronné
![]() Ingénieur développement logiciels Inscription : février 2008 Messages : 430 ![]() |
C'est parceque ton serveur local est localisé à l'Est du méridien de GreenWich et l'hébergement à l'Ouest... C'est un bug connu sur Debian 6.0...
![]() Sans code c'est chaud de deviner......
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre. Linus Torvalds |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() |
Bonjour à vous,
Je ne vois pas en quoi fournir du code pourrait aider. Si cela venait effectivement de cette partie le problème de fuite se verrait sur les 2 serveurs. De plus fournir mon code serait fastidieux étant donné le nombre de classes mises en cause. L'aide que je demande concerne plus des points que je pourrai vérifier, plutot que de la correction de code. Utilisant symfony (1.4) et doctrine (1.2), j'ai bien placé mes appels à free et unset. Vu tout ce que j'ai pu lire sur le net c'est que doctrine a des pbs de fuite et mémoire, et PDO aussi, d'ou une sur-consommation, mais la vraie question c'est COMMENT savoir pourquoi sur un serveur la mémoire est correctement libérée et pas sur l'autre serveur. Qu'elles sont les options du php.ini qui peuvent être vérifiées/modifiées pour déterminer la raison de ce genre de pb etc .. Ma question est-elle plus claire?
__________________
Linux because rebooting is just for adding medias |
|
|
00
|
|
|
#5 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 648 ![]() |
gc_enable() ?
fait une analyse avec memory_get_peak_usage(), effectue un profilage de l'exécution. |
|
|
00
|
|
|
#7 | |
|
Membre chevronné
![]() Ingénieur développement logiciels Inscription : février 2008 Messages : 430 ![]() |
Citation:
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre. Linus Torvalds |
|
|
|
00
|
|
|
#8 | ||
|
Membre confirmé
![]() |
Le code suivant est donc une partie de la méthode execute d'une task symfony.
XmlToArray est une classe permettant depuis un fichier XML de récupérer un tableau décrivant le schema de "Objet" qui est un objet du model de la base de données. La méthode d'analyse XML utilisé est SAX, elle contient un destructeur qui libère bien les ressources du parseur. La méthode free de Doctrine_Record a été surchargé par nos soins afin de terminer de libérer les données qui étaient encore stockées dans l'objet ... Je ne sais que rajouter ? Code :
__________________
Linux because rebooting is just for adding medias |
||
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 648 ![]() |
Ca va sembler ridicule, mais essaie ceci:
ne fait qu'instancier l'objet Object (vide), et que tu unset($o) ensuite, donc que tu n'accède à AUCUNE méthode de l'instance. Est-ce que tu as toujours des statistiques de mémoire qui grimpe ? Si oui; Vérifie la configuration du garbage collector de PHP. Sinon; Montre-nous le code de Object ( Le constructeur, le destructeur, et la méthode free devrait suffire) |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
fait un foreach pour parcourir ton array,
sinon ça c'est faux Code :
$o = NULL; //-- unset($o); - comportement identique
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#11 | |||||
|
Membre confirmé
![]() |
Citation:
Citation:
Citation:
__________________
Linux because rebooting is just for adding medias |
|||||
|
|
00
|
|
|
#12 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
Citation:
sinon a quoi sert le XmlToArray sachant que tu peux parcourir un SimpleXMlElement ?
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#13 | ||||
|
Membre confirmé
![]() |
Citation:
Pour XmlToArray, nous recevons un fichier XML d'un prestataire, nous devons stocker les données présentes dans ce fichier dans notre base de données, XmlToArray va créer un tableau correspondant à la structure de notre base en mappant les éléments XML vers nos tables et colonnes de la base via un fichier Yaml. Sinon du coté du garbage collector, je n'ai pas trouvé beaucoup de moyen de le configurer a part les session.gc_* Citation:
Code :
__________________
Linux because rebooting is just for adding medias |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com