Anthotill
Messages postés127Date d'inscriptionmardi 19 août 2003StatutMembreDernière intervention13 mars 2010
-
13 déc. 2005 à 19:48
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 2007
-
21 déc. 2005 à 14:46
Bonjour à tous !
J'ai un probleme avec un site, il mange toute la mémoire RAM d'un serveur web est le fait planter.
J'aurais aimé savoir ce qui pouvais conduire a se résultat, je me demandais si lorsque l'on oublie plusieurs fois de fermer la connexion a Mysql (mysql_close()) ca pouvais saturer la RAM d'un serveur à un point qu'il plante ?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 13 déc. 2005 à 23:31
Pour le * à remplacer par les champs utilisés oui c'est mieux. pour le mysql_close() faut le faire après la requête et le mysql_connect avant. Si t'as 5 requêtes bah tu fais mysql_connect ensuite les 5 requêtes et ensuite le mysql_close (et ensuite les fetch_row... etc)
Ensuite faut voir dans ton phpinfo à quelle taille maximale est fixée le memorylimit
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 14 déc. 2005 à 08:34
"Je le redis ==> mysql_close() s'éxécute tout seul A LA FIN DE LA DERNIERE LIGNE DE CODE
Alors vire tes mysql_close() pour le moment..."
c'est vraiment la dernière des choses à faire (autrement dit faut pas le faire). D'une part car mysql_close() foutu à la fin conserve en ram la connexion (et consomme des ressources) durant toute la durée de génération de ton code html, et d'autre part parce que t'auras plus facilement d'erreurs de max_user_connections en ne fermant pas ta connexion proprement.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 14 déc. 2005 à 12:26
"D'une part car mysql_close() foutu à la fin conserve en ram la
connexion (et consomme des ressources) durant toute la durée de
génération de ton code html"
Vrai, sauf que j'ai pas son code sous la main ! Seulement, comme pour le moment il est tout seul pour débbugger son problème, autant qu'il enlève les mysql_close() en trop pour pouvoir les replacer efficacement la ou il faut. Voila pourquoi je voulais qu'il les enlèves à l'origine :)
"et d'autre part parce que t'auras plus
facilement d'erreurs de max_user_connections en ne fermant pas ta
connexion proprement."
Comme dit plus haut :)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 14 déc. 2005 à 13:13
Nan, ton hébergeur te demande d'utiliser la classe db de ton forum, et de ne pas passer par les fonctions php de base.
Dans mysql.php, tu dois avoir une classe mysql, te permettant de gérer tes requête, tes connexions, etc.
pichpoich
Messages postés26Date d'inscriptionlundi 5 janvier 2004StatutMembreDernière intervention29 janvier 2009 14 déc. 2005 à 13:49
J'ai eu un peu le même type de problème sur mon serveur, il ramait énormément et parfois plantait.
Du coup, j'ai agit suivant plusieurs directions :
- les variables de session étaient trop nombreuses donc, j'en utilise nettement moins désormais, quitte a garder des valeurs dans l'url ( ça demande de revoir tous les liens mais bon).
- sur chaque page que je visite, j'"include" un fichier que j'ai nommé unset et qui va supprimer toutes les variables de session de la page que je viens de quitter (et qui ne sont pas indispensable bien sur).
Depuis, ça va super mieux en terme de vitesse et je n'ai pas encore planté le serveur.
Si tu veux savoir combien de variable de session tu trimbales, place le code de ravery de la page :
http://www.phpcs.com/code.aspx?ID=34999, c'est ce qui m'a fait prendre conscience du problème.
pichpoich
Messages postés26Date d'inscriptionlundi 5 janvier 2004StatutMembreDernière intervention29 janvier 2009 14 déc. 2005 à 14:57
ça m'a un peu dérouté aussi.
Pour lire les variables de session, il faut que tu ailles tout en bas de la page ou il y a marqué Globals en gras (il y a plusieurs globals en gras alors tu vas vraiment au dernier le plus bas) puis la dedans tu descends, tu y trouveras le navigateur que tu utilises puis le seveur (SERVER_SOFTWARE), puis des écritures en majuscules, et en dernier il y a
HTTP_POST_VARS : Array
| _POST : Array
| HTTP_GET_VARS : Array
| _GET : Array
| HTTP_COOKIE_VARS : Array
| _COOKIE : Array
| HTTP_SERVER_VARS : Array
| _SERVER : Array
| HTTP_ENV_VARS : Array
| _ENV : Array
| HTTP_POST_FILES : Array
| _FILES : Array
| _REQUEST : Array
| GLOBALS : Array
| HTTP_SESSION_VARS : Array
| _SESSION : Array
Les variables de session que tu utilises sont en dessous.
J'espère que j'ai été clair (j'ai un petit doute malgré tout).
A plus.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 14 déc. 2005 à 19:54
oui si t'en as besoin en haut tu la mets en haut, mais, très important, tu la fermes après la dernière requête, et tu fais pas de fetch_machin pendant que t'as la connexion d'ouverte, tous les fetch_row, etc.. se font connexion fermée :-)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 14 déc. 2005 à 20:15
bah tu vas te tirer une balle alors car non c'est pas bon :-( lol
include('connexion.php');
$sql = "SELECT id, marque, cat, nom FROM
site_fichetec WHERE cat ='".$_GET['cat']."' AND marque
='".$_GET['marque']."'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 14 déc. 2005 à 20:54
non non.... fais tes requêtes tout en haut et différencies-les
$sql1 = "SELECT id, entete, titre, sport, annee, date, heure FROM site_article ORDER BY `id` DESC LIMIT 0 , 4";
$req1 = mysql_query($sql1) or die('Erreur SQL !
'.$sql1.'
'.mysql_error());
$sql2 = "SELECT id, date, titre FROM site_article ORDER BY `id` DESC LIMIT 0 , 15";
$req2 = mysql_query($sql2) or die('Erreur SQL !
'.$sql2.'
'.mysql_error());
$sql3 = "SELECT id, marque, nom, cat FROM site_fichetec ORDER BY `id` DESC LIMIT 0 , 3";
$req3 = mysql_query($sql3) or die('Erreur SQL !
'.$sql3.'
'.mysql_error());
bref ensuite tu fermes la connexion (mysql_close()) et lorsque t'as besoin des résultats de la requête 1:
pichpoich
Messages postés26Date d'inscriptionlundi 5 janvier 2004StatutMembreDernière intervention29 janvier 2009 15 déc. 2005 à 09:24
Si je comprends bien, en résumé:
- on ouvre la connection.
-on fait toutes les requettes en haut de page genre $sql="fais ça" puis $sql1="fais çi"...
- on ferme immédiatement la connexion.
- on traite ensuite les informations avec des mysql_feecht_rows ou _array.
- pour finir on fait un mysql_free_result histoire de déstresser la machine ?
bon, je m'incruste un peu, mais j'ai des problèmes similaires.
Enfin, je ne sais pas, mais est-ce obligatoirement une requette sql qui fait planter ? une fois j'y suis arrivé en faisant passer des variables avec du code ascii dans l'adresse url sans encoder avec urlencode.