2010-05-05 6 views
1

J'installe php 5 (plus précisément 5.3.1) en tant que module apache.Le script php raccroche de manière aléatoire

Après que l'un de mon application devient aléatoire sur mysql_connect - parfois fonctionne, parfois non, parfois recharger de la page aide.

Comment est-ce que ceci peut être fixé? J'utilise Windows Vista, Apache/2.2.14 (Win32) PHP/5.3.1 avec le module php, MySql 5.0.67-community-nt.

Après une minute, j'obtenir le message d'erreur:

Fatal error: Maximum execution time of 60 seconds exceeded in path\to\mysqlcon.php on line 9

Je lance MySql localement et la charge lourde ne pouvait pas être une raison:

SHOW PROCESSLIST montre environ 3 processus

SHOW VARIABLES LIKE 'MAX_CONNECTIONS' est 100.

MISE À JOUR:

Au début, je pensais que cela est connecté avec mysql_connect. Mais maintenant je ne peux pas dire avec certitude.

chose Plus difficile est quand insérer la ligne de mise au point:

$fh = fopen("E://_debugLog", 'a'); fwrite($fh, __FILE__ . " : " . __LINE__ . "\n"); fclose($fh);

scénario commencer à travailler à cet endroit en règle.

Le redémarrage d'Apache résout le problème.

+0

message d'erreur? – Cesar

+0

@Cesar I mis à jour post – sergtk

+0

Le serveur mysql est-il sur la même machine que le serveur php? –

Répondre

1

Vous pouvez atteindre la limite de connexion MySQL, et le script essayant de se connecter va tourner ses roues jusqu'à ce qu'une connexion soit disponible, mais se trouve dans la limite de temps d'exécution maximale avant que cela se produise. Lorsque vous cliquez sur l'une de ces longues pauses, sautez dans le moniteur mysql et faites SHOW PROCESSLIST, qui liste toutes les connexions au serveur. Vous pouvez récupérer la limite de connexion avec SHOW VARIABLES LIKE 'MAX_CONNECTIONS'. Si le nombre de processus actifs est proche de ou à la valeur max_connections, c'est votre problème.

+0

J'ai mis à jour la question. Ce n'est pas le cas. En tout cas merci pour la note. – sergtk

+0

Je suppose que la prochaine étape serait de vérifier 'netstat' à partir d'un shell de commande et de voir s'il y a des connexions bloquées dans un état d'attente (syn_sent, très probablement). Vous pouvez essayer d'utiliser une socket locale pour la connexion MySQL au lieu de TCP. –

+0

après une enquête plus approfondie (ce n'est pas facile à reproduire) il me semble que le problème n'est pas lié à mysql_connect – sergtk

1

Essayez d'isoler le problème:

  1. tout Arrêtez (mysql apache).
  2. Bump les niveaux de journalisation de Apache et mysql à un niveau détaillé (de sorte que vous vous connectez presque tout).
  3. Tirez la seule fonction/morceau de code qui appelle mysql_connect hors de votre script existant et créez un nouveau script qui ne fait rien d'autre que d'interroger mysql et de renvoyer les résultats. (Vous pouvez également tout commenter sur votre script existant). Commencez à tout sauvegarder et regardez dans les journaux pour tout ce qui sort de l'ordinaire. Exécutez votre script et examinez les journaux.
  4. Était-ce lent? Quelque chose de bizarre dans les journaux? Si ce n'était pas lent, commencez à ajouter/décommenter des choses de votre script original. Est-ce que ça ralentit? Qu'est-ce qui apparaît dans les journaux?
Questions connexes