2010-11-19 187 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