web-dev-qa-db-fra.com

session_start semble être très lent (mais seulement parfois)

Pour une raison étrange, notre serveur a décidé d’être très lent au début des sessions. Pour chaque session_start, le serveur expire au bout de 30 secondes ou cela prend environ 20 secondes pour qu'il démarre la session. C'est très bizarre, vu que cela n'a pas été fait depuis très longtemps (la dernière fois que notre serveur l'a fait, c'était il y a environ 7 mois). J'ai essayé de changer la session pour parcourir une base de données à la place, et cela fonctionne bien, cependant, comme notre site Web actuel est construit, il faudrait des jours pour afficher chaque page et changer le chargement des sessions pour inclure une nouvelle session. gestionnaire. Donc ma question reste:

Pourquoi est-ce si lent, et pourquoi seulement parfois?

Nous utilisons un serveur hetzner dédié doté de 24 Go de RAM et d'un processeur suffisamment rapide pour exécuter un simple serveur Web (un Xeon, je crois, mais je ne suis pas sûr). Nous utilisons Debian sur le serveur avec une configuration Apache + fastcgi + php5.

Le serveur ne signale pas beaucoup de charge, ni par l'état du serveur, ni par la commande top. Vnstat ne signale aucun problème avec notre lien réseau (encore une fois, cela ne ralentirait pas la gestion de la session locale). IOtop ne signale aucun problème avec les processus prenant en charge l'intégralité du disque dur. L'écriture dans le dossier tmp où se trouvent les fichiers de session fonctionne rapidement si elle est effectuée via vim.

Encore une fois, pour que ce soit bien clair, ma principale préoccupation ici n’est pas de savoir si nous devons ou non passer à une base de données ou à une version des sessions en mémoire cache, c’est simplement demander pourquoi cela se produit, car tout ce que j’examine semble fonctionne bien, sauf pour le PHP lui-même.

EDIT: Le nombre maximum de fichiers de notre répertoire PHP tmp est de 2,9 MB, donc rien de ce qui devrait avoir un impact, je crois.

UPDATE: Je n'ai jamais compris ce qui n'allait pas et/ou comment le réparer, mais le problème a disparu après le passage aux sessions memcached/db.

25
h2ooooooo

Avez-vous essayé session_write_close();? Ceci désactivera l'écriture dans les variables de session, mais vous pouvez toujours lire leurs données. Et plus tard, lorsque vous aurez besoin d'écrire une variable de session, rouvrez-la.

J'ai également souffert de ce problème, mais cette chose a fonctionné comme un charme. C'est ce que je fais:

session_start(); //starts the session
$_SESSION['user']="Me";
session_write_close();   // close write capability
echo $_SESSION['user']; // you can still access it
15
Kush

J'ai eu le même problème: soudain, le serveur a pris 30 secondes pour exécuter une requête. J'ai remarqué que c'était à cause de session_start () . La première requête était rapide, mais chaque requête suivante prenait environ 30 secondes pour être exécutée. J'ai constaté que le fichier de session dans c:\wamp\tmp était verrouillé par la première demande pendant environ 30 secondes. Pendant ce temps, la deuxième demande attendait que le fichier soit déverrouillé. J'ai découvert que cela avait quelque chose à voir avec rewrite_mod et .htaccess . J'ai désactivé rewrite_mod et commenté chaque ligne de .htaccess et cela fonctionne à nouveau comme un charme. Je ne sais pas pourquoi c'est arrivé parce que je ne me souviens pas d'avoir modifié les paramètres ou la conf sur wamp.

5
user2929078

J'ai rencontré ce problème aussi. Il a été répondu ici:

Problème avec la fonction session_start () (fonctionne lentement)

Les sessions sont verrouillées par PHP alors qu'un script est en cours d'exécution. Par conséquent, si les scripts sont empilés sous la même session, ils peuvent entraîner des retards étonnamment longs.

2
phphelp

Je sais que c'est une vieille question mais je viens de résoudre ce problème sur mon serveur. J'ai seulement activé le cache de contournement pour les domaines du gestionnaire de cache dans le panneau de configuration.

Mes sessions prenaient des âges pour commencer et fermer maintenant, elles sont instantanées.

0
user1432290

Chaque session est stockée par Apache sous forme de fichier texte.

Lorsque le début de la session est utilisé pour reprendre une session existante (via l'identifiant de cookie par exemple), peut-être qu'un gros fichier de session (une session avec beaucoup de contenu à l'intérieur) peut être lent à démarrer?

Si tel est le cas, votre application met probablement beaucoup de données dans des sessions.

0
ab_dev86

Veuillez vérifier si vous avez les paramètres memcache corrects, par exemple dans /etc/php.d/memcached.ini

0
vikramaditya234