IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] echo et print très très lents...


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut [Tableaux] echo et print très très lents...
    Explication de la situation:
    J'étais autrefois sur un serveur mutualisé. Ayant trop de problème de panne du site pour diverses raison, j'ai décidé de passer sous un Serveur Virtuel Privé (VPS).

    Depuis le transfert, plusieurs utilisateurs de mon site ce sont plain que certaines pages prennaient un temps fou à charger. Selon les statistique de génération de la page au bas du site, il arrive parfois qu'un page prenne plus de 300 secondes à générer (pire cas: 560 secondes!). Attention, je dis bien GÉNÉRER, et non pas 'chargé sur une connexion lente'.


    Recherche du problème:
    Le premier truc qui me viend à l'esprit est qu'il y a un problème avec MySQL: certaines requêtes sont probablement très lente considérant qu'il y a une table de 400mb de données. Ayant une fonction qui gère toutes mes requêtes afin d'en tirer des statistiques, je me rend rapidement compte que toutes mes requêtes sont rapides. optimisable peut-être, mais rien qui ne passe proche de justifier une page qui prend 560 secondes à générer: toutes mes requêtes sont traité en moins d'une seconde.

    Je me dis alors que peut-etre que MySQL entre en "collision" car il recevrait deux requête en même temps. Je créer donc un système qui Garde en mémoire toutes les requêtes et le temps pour chaqu'une d'elle. À la fin de la page, si le temps de génération de la page dépasse 60 secondes, je recois le rapport par courrier. Rien, je recois des rapports mais toutes les requêtes sont rapides. Le temps est perdu ailleurs.

    Je place donc des 'affichage de temps' un peu partout dans mon code. La lenteur proviend de la boucle qui génère la liste des messages.

    Je décide donc de retirer tout les ECHO de la boucle et de tout placer le contenu à mettre sur la page dans un buffer. Et de faire:

    echo $he_buffer;

    après la boucle seulement. La boucle se fait maintenant en un temps éclair mais je continue de recevoir des rapports de page lente par email. Je place donc un affichage de temps avant et après le echo $he_buffer.

    $avant = $timer->finish();
    echo $he_buffer;
    $apres = $timer->finish();

    $avant retourne 0.3
    $apres retourne des trucs immenses comme 350.424 par exemple.

    Donc le echo prend un temps fou à traiter. Il est vrai que $he_buffer contiend parfois jusqu'à 250Kb de texte mais de la à prendre 5 minutes...


    Solutions tentées:
    - Contacter le support technique de mon fournisseur VPS. Rien de leur coté, ils ont placé le site sur un dual Xeon 3ghz avec 8gb de ram, le problème persiste.
    - Remplacer le echo par un print
    - Placer des appel à la fonction flush() avant et après le echo
    - Monter le paramêtre memory_limit à 20M dans la configuration de PHP
    - Re-vérifier le code plusieurs plusieurs fois avec plusieurs personnes différentes. Le code est bon (et fonctionnais bien avant)
    - Recompiler Apache et PHP dans le WHM. la version de PHP à été mise à jours (5.1.4).

    Avez-vous des pistes (ou mieux, des solutions) ???

  2. #2
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    1ere fois que je vois ca
    le probleme ne vient pas de ton code, c'est sur, je me demande s'il y a pas un gros probleme avec ton serveur ...

    quel est le systeme + version php + serveur ...etc ?


    si tu es sur linux, check l'utilisation memoire et processeur au moment de l'echo car ce n'est pas le genre de commande qui est censé consommer meme avec 250Ko de texte.

  3. #3
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    PHP Version 5.0.5

    Mysql Client API version 4.1.18

    Le serveur est sous une distribution CENT OS
    Et le VPS ne confère en tout temps 512 mb de ram et 800mhz de CPU.

    Mais le support technique a testé tout ca sur un Dual Xeon 3ghz avec 8bg de ram donc sauf s'il existe un fichier de config qui fait que PHP ou Apache n'utiliserait pas plus de X ressource, le système en a suffisament.

    Le CPU n'est jamais surchargé.

  4. #4
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Est-ce que ca pourrait être la faute de "Zend"
    Car mon fichier de config de PHP est dans un dossier "Zend" j'ai cherché un peu sur le net et j'ai vu que c'était un accélérateur de PHP.

    Se pourrait-il que le délais soit une tentative de mise en cache de la part de Zend ? ou de recherche de correspondance.

    Enfin, je sais pas trop ce que c'est mais j'ai même réinstallé Apache et PHP via le panel WHM je suis maintenant en PHP 5.1.4 et le problème persiste toujours.


    Ho, et je suis très sérieux à propo de ce problème... Si quelqu'un trouve une solution, je suis prêt à offrir une petite récompense monétaire en guise de remerciement... Je suis vraiment à bout de souffle.

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Avec une BDD de 400 Mio, c'est un vrai serveur privé dédié qu'il te faut (pas virtuel). Cela m'étonne que ton mutualisé t'aie supporté avec ce volume de données !

    Bref.

    Zend, en soi, ce n'est rien. C'est une entreprise, si tu veux, mais certainement pas un programme.
    Zend Engine est le moteur qui compile les scripts PHP.
    Zend Optimizer est un accélérateur de code.
    Je ne pense pas que le problème vienne de Zend.

    En réalité, je ne vois vraiment pas pourquoi cela ne passe pas.
    Tu as cerné le problème au echo unique, je vois ? C'est certain ?
    Rappelle-toi que PHP ne compte pas le temps d'exécution des includes et autres exécutions externes au scipt courant : une requête SQL n'est pas comptée dans le temps d'exécution de ton script.

  6. #6
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Bah, je sais pas pourquoi il tolérais, mais j'avais droit à 5gb d'espace disque donc 400mb j'étais loin de la limite.

    Ca roulais bien en mutualisé


    Maintenant, comme le montre mon extrait de code, il n'y a vraiment QUE le echo sur cette ligne, rien d'autre (pas de include, pas de requête SQL)

    Tu semble en connaitre un peu plus que moi, tu as une idée ou tu pense être en mesure de trouver d'ou ca proviendrais ?

    j'ai installé Zend Optimizer 3.0 sur le server afin d'être certain d'être à jour et qu'il n'y ai pas d'incompatibilité avec la version actuelle de PHP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. BDD sur réseau très très très lent...
    Par ericain dans le forum Access
    Réponses: 12
    Dernier message: 20/02/2015, 17h17
  2. newSchema(url) exécution très très très lente
    Par schum-hacker dans le forum Général Java
    Réponses: 6
    Dernier message: 21/01/2013, 09h32
  3. Logiciel intranet très très très lent
    Par openeyes dans le forum ALM
    Réponses: 7
    Dernier message: 15/02/2011, 15h16
  4. Améliorer les performances - très (très) (très) grands datasets
    Par debdev dans le forum Administration et Installation
    Réponses: 6
    Dernier message: 08/01/2010, 16h46
  5. Démarrage trés, trés, trés difficile
    Par Cazaux-Moutou-Philippe dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 29/06/2008, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo