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 :

Un timeout incompréhensible [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut Un timeout incompréhensible
    Salut à tous

    J'ai donc un problème incompréhensible depuis pas mal de temps et j'essaie comme fou de débugger ça ... impossible

    A savoir que je suis en local (Win XP) et Wamp.

    Mes nombreux essais m'amène à dire que c'est bien dans mon code que cela coince, ce n'est ni lié au système, ni au navigateur.

    Le problème c'est que j'ai régulièrement des timout, que lors d'un click sur une lient ou autre bouton submit fait que la page mouline sans fin.
    Par moment j'obtiens comme seul contenu un retour d'erreur de Php, un timout. Mais pas toujours.

    A savoir aussi que cela n'était pas le cas à une époque, c'est donc très certainement lié à une évolution de mon code.
    Malheureusement, j'ai remarqué ce phénomène assez tard, beaucoup de modifs ont été effectués depuis.

    J'ai soupçonné ma gestion des erreurs (une classe), je l'ai supprimé. Ca continu.
    J'ai recodé une abstraction de PDO (Bdd) en plus simpliste. Ca continu.
    J'ai intégré et utilise pas mal JQuery, j'ai tout supprimé. Ca continu.

    J'ai tenté de débugger tout ça en mettant des points d'arrêts (exit) + des echo dans certaines parties de code. Rien de concluant.

    Je vide mes logs d'erreurs Php avant les essais. Pas l'ombre d'une erreur, sauf cette unique erreur de timout quand elle a lieu (car ce n'est pas toujours).

    J'ai peut être la gestion des sessions (une classe) qui sont stockées dans la Bdd qui pourrait être la cause, mais modifier tout ça me semble long et laborieux, d'autant plus que j'en suis pas certain.

    De même que je ne vois pas quel bout de code je pourrait mettre pour que vous puissiez détecter cette erreur.
    Je sens que ça être franchement compliqué mon histoire


    Bref.
    Je patauge dans la choucroute sérieusement

    Ma question est donc :
    Y a t-il un moyen, une technique pour pister une telle erreur/comportement ?
    Comment feriez vous dans un cas pareil ?


    Merci pour toute aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    en mettant des points d'arrêts (exit) + des echo dans certaines parties de code. Rien de concluant.
    Si tu mets un exit() juste avant ton traitement blocant, tu n'as pas de timeout ; si tu descent le exit d'une ligne, tu tombes en timeout.
    A moins d'un cas vraiment étrange, ce test est forcemment concluant.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    A moins d'un cas vraiment étrange, ce test est forcemment concluant.
    Je partage tout à fait ton raisonnement, cependant je l'ai tenté et j'ai jamais obtenu la moindre piste.

    De plus, cette erreur est très aléatoire, ce n'est donc pas le cas tout le temps, sans compter que cela n'arrive pas à une page en particulier.
    C'est pas pratique aussi, car un exit() stop tout, il faudrait qu'il y soit au moment ou ça déconne.


    Un autre test que j'effectue :
    J'ai une page (top_page.php) qui est le point d'entrée de toutes les pages, sans exception.
    La toute 1ère ligne de code est : echo '1,';
    J'en ai mis 10 tout au long de cette page.
    Quand ça fonctionne, je vois donc en tête de page : 1,2,3,4,5,6,7,8,9,10.

    A force de clicker sur des liens, arrive un moment ou cela block, la page mouline ... timeout.

    La page reste dans l'état ou elle est, j'obtiens donc aucune réponse de la page demandée, et du coup pas l'ombre du résultat d'un echo.
    Je devrais pourtant au moins voir un 1 affiché.

    Le pire, c'est que dans mon code j'ai redéfini le chemin des logs d'erreurs Php (php_errors.php).
    C'est un fichier qui est inclu dans cette "top_page", et il est bien interprété car j'obtiens la ligne m'indiquant le timout.
    Ce fichier inclus ce trouve pourtant après le 1er echo, je devrais donc voir d'abord ce 1er echo, et ensuite l'erreur, non ?


    On dit pourtant que php interprète le code de manière procédurale, faut croire que non.
    Visiblement, il détecte un code trop long (peut être une boucle infinie), ça provoque un plantage et du coup il renvoie rien, quand bien même il y a eu auparavant du code valide, comme un simple echo.
    Du moins je le perçois ainsi, et ça ne me facilite pas les choses.


    Voilà tout de même la seule et unique erreur que j'ai dans mon log d'erreur php. (après l'avoir vidé et effectué pas mal de navigation pour obtenir un timout) :
    [24-Jan-2010 14:41:12] PHP Fatal error: Maximum execution time of 5 seconds exceeded in D:\phplib\communs\classes\gestion_erreurs.php on line 40
    La ligne 40 de gestion_erreurs.php correspond à ceci :
    (elle est appelée par ceci : set_error_handler('erreur2Exception') )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function erreur2Exception($code, $message, $file, $line) {
    Et même si dans cette fonction erreur2Exception() je mets un exit() j'obtiens rien comme piste.

    Donc Php m'indique que c'est l'appel à ma fonction qui provoque le timout.
    Mais si je supprime ma gestion des erreurs, le set_error_handler(), les timeout continuent.
    C'est dingue ça non ? (ça prend la tête j'vous dis pas )


    Impossible de savoir ce qui provoque vraiment ce timeout, pas l'ombre d'une piste.
    Incompréhensible ce truc.


    Merci de m'aider en tout cas

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    5 secondes c'est peut etre un peu court comme temps maximum si tu fais de gros traitements.

    On dit pourtant que php interprète le code de manière procédurale, faut croire que non.
    Procédurale ca veut dire "utilisant des procédures" ; mais certes PHP s'execute bien de haut en bas. Cependant sa disposition client/serveur fait qu'un echo ne s'affiche pas immediatement dans le navigateur, voir meme pas du tout si le script est interrompu avant le premier envoi.

    Si tu n'utilises pas ta gestion d'erreurs personnalisées, tu n'as pas un suivi plus clair de ton erreur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    5 secondes c'est peut etre un peu court comme temps maximum si tu fais de gros traitements.
    C'est vrai que j'ai volontairement diminuer ce temps, mais auparavant cela le faisait aussi et pour 60 secondes (par défaut il me semble).
    En tout cas je doute que cela soit la nature de l'erreur, je suis en local avec peu de données, et les traitement me semblent loin d'être énormes.
    Il faut moins de 2 secondes pour que la page s'affiche complètement en temps normal.


    Si tu n'utilises pas ta gestion d'erreurs personnalisées, tu n'as pas un suivi plus clair de ton erreur ?
    J'ai un message différent c'est vrai dans ce cas là, et cela concerne ma classe d'abstraction de PDO.
    C'est pour cette raison que je l'ai simplifiée, refais autrement.
    C'est un peu l'unique piste que j'ai, mais il y a aucun élément explicite, de parlant.
    De plus, je ne peux pas tout refaire à ce niveau, sinon c'est l'ensemble du projet qu'il faut refaire.

    Le problème c'est que l'erreur obtenue est la suivante :
    [24-Jan-2010 15:51:13] PHP Fatal error: Maximum execution time of 5 seconds exceeded in D:\phplib\communs\classes\pdo_mysql.php on line 0
    A la ligne 0 ???

    A ligne 1 (ou 0) il y a ceci <?php
    Il est sympa Php ... mais il pourrait être un peu plus causant


    Faut dire que cette erreur de timeout je l'avais vu, et un peu mis de coté.
    Maintenant que je souhaite vraiment mettre la main dessus, je modifie donc mon code et je commence à avoir d'autres erreurs, des effets de bords pas tristes du tout

    Bref ... c'est l'bordel un peu complet en ce moment.

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Suite de cette épisode rocambolesque

    La situation évolue, et je dirais dans le bon sens mais elle reste tout autant énigmatique

    Ce matin dès le lancement du projet j'ai eu comme 1er page une belle erreur (ça commençais fort) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [25-Jan-2010 08:03:10] PHP Fatal error:  Maximum execution time of 5 seconds exceeded in D:\phplib\communs\classes\pdo_mysql.php on line 227
    La ligne 227 étant l'accolade qui ferme la classe PdoMySQL.
    Toujours aussi causant ce Php

    Mais après cela j'obtenais à plusieurs reprise ces 3 retours d'erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [25-Jan-2010 11:20:43] PHP Warning:  PDO::__construct() [<a href='pdo.--construct'>pdo.--construct</a>]: MySQL server has gone away in D:\phplib\communs\classes\pdo_mysql.php on line 15
    [25-Jan-2010 11:20:43] PHP Warning:  PDO::__construct() [<a href='pdo.--construct'>pdo.--construct</a>]: Error while reading greeting packet. PID=2308 in D:\phplib\communs\classes\pdo_mysql.php on line 15
    [25-Jan-2010 11:20:43] PHP Fatal error:  Maximum execution time of 5 seconds exceeded in D:\phplib\communs\classes\pdo_mysql.php on line 0
    En scrutant les logs d'erreurs :
    Le access.log n'a aucune indication exploitable, que des HTTP 200
    Le mysql.log non plus, uniquement que le démarrage à eu correctement, rien de plus.

    Par contre, apache.error.log avait une erreur troublante à peu près dans le même temps de ce bug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Mon Jan 25 11:09:09 2010] [warn] (OS 64)Le nom réseau spécifié n'est plus disponible.  : winnt_accept: Asynchronous AcceptEx failed.
    Une recherche sur GG m'a amené sur ce topic de WampServer : Asynchronous AcceptEx failed.
    J'ai effectué la modif de code du httpd.conf + relance d'Apache.
    J'en sais fichtre rien se que fait ces instructions


    Et je ne sais absolument pas si cette dernière modif avait un rapport avec mon bug, mais depuis j'ai beau clicker comme un fou furieux sur des liens, impossible de reproduire ce bug, plus de timeout ???
    En temps normal j'en obtenais un au bout de 10/30 clicks (c'était très aléatoire)
    Faut croire que ce problème n'est plus présent, qu'il serait résolu, comme ça un peu par enchantement.

    Je suis quand même un désabusé car je n'ai pas de réelles explications.
    Je continue à faire des essais (des clicks) jusqu'à ce soir, sait on jamais.

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

Discussions similaires

  1. [TOMCAT] Problème de timeout d'une servlet
    Par tuxor dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 18/09/2007, 13h04
  2. [WSAD5] probleme incompréhensible
    Par capitaine_banane dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 07/04/2004, 12h56
  3. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum Développement
    Réponses: 2
    Dernier message: 30/12/2003, 18h22
  4. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 17h37
  5. Ftp login & Timeout
    Par MSP dans le forum Modules
    Réponses: 6
    Dernier message: 29/08/2003, 13h55

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