2010-11-19 126 views
2

我有2个服务器运行repcached的每个实例。 Php被配置为在那里保存会话。Memcached和php会话问题

的2个服务器被复制的冗余

的问题是,我做了一些基准测试与AB。运行

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

我得到在Apache的错误日志中的一些错误 无法写入会话数据

看在两个服务器为0的listen_disabled_num,所以没有连接没有担任

顺便说一句,我有最大连接设置为4096

任何想法?

感谢

回答

0

我有当会话数据比内存缓存的1MB大障碍本次发行前。我通过在将会话数据存储在Memcache中之前对其进行压缩来解决此问题。

下面是我使用的代码:

<?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

嗨PureForm。不幸的是,这不是我的情况,因为会话数据非常小 – Thomas 2010-11-19 09:23:40