2010-11-19 11 views
2

J'ai 2 serveurs exécutant chacune une instance de repcached. Php est configuré pour enregistrer des sessions là-bas.Problèmes de sessions Memcached et php

Les 2 serveurs sont répliquées pour la redondance

Le problème est que je fais des points de repère avec ab. Courir

ad -n 10000 -c 500 http://mysite 

Je reçois des erreurs dans l'erreur apache journal Échec de l'écriture des données de session

En regardant le listen_disabled_num aux deux serveurs, il est 0, donc aucune connexion ne sont pas servis

En passant, j'ai max connexions mis à 4096

Des idées?

Merci

Répondre

0

J'ai eu ce problème avant lorsque les données de la session était plus grande que la barrière de 1Mo de Memcache. Je l'ai résolu en compressant les données de session avant qu'elles ne soient stockées dans Memcache.

Voici le code que je utilise:

<?php 
class SessionHandler { 
    public $lifeTime; 

    public function __construct() { 
     $this->lifeTime = intval(ini_get("session.gc_maxlifetime")); 

     session_set_cookie_params(0,"/",".domain.com",false,true); 
     session_name("SITESESSION"); 
     session_set_save_handler(array (&$this,"open"),array (&$this,"close"),array (&$this,"read"),array (&$this,"write"),array (&$this,"destroy"),array (&$this,"gc")); 
     session_start(); 
    } 

    public function open($savePath,$sessionName) { 
     return true; 
    } 

    public function close() { 
     return true; 
    } 

    public function read($sessionID) { 
     # The default miss for MC is (bool) false, so return it 
     return MC::get("userSession_{$sessionID}"); 
    } 

    public function write($sessionID,$data) { 
     # This is called upon script termination or when session_write_close() is called, which ever is first. 
     return MC::set("userSession_{$sessionID}",$data,$this->lifeTime,true); # The last true sets it as compressed. 
    } 

    public function destroy($sessionID) { 
     # Called when a user logs out... 
     return MC::delete("userSession_{$sessionID}"); 
    } 

    public function gc($maxlifetime) { 
     # The MC keys expire on their own, no need to do anything here. 
     return true; 
    } 
} 
?> 
+0

Salut PureForm. Malheureusement, ce n'est pas mon cas car les données de session sont très petites – Thomas