2010-11-19 7 views
2

각 2 개의 서버에서 repcached 인스턴스를 하나씩 실행하고 있습니다. PHP는 거기에 세션을 저장하도록 구성됩니다.Memcached 및 PHP 세션 문제

2 개 개의 서버 문제는 내가 AB 몇 가지 벤치 마크를하고있는 중이 야한다는 것입니다 중복

에 대한 복제됩니다.

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

실행 나는 그래서 연결이 제공되지되지 이 0 인 두 서버에서 listen_disabled_num 보면 세션 데이터

를 작성하는 데 실패하는 아파치 오류 로그에 약간의 오차가 점점 오전

그런데 최대 연결 수가 4096으로 설정되었습니다.

아이디어가 있으십니까?

감사

답변

0

나는 세션 데이터에서 Memcache의 1메가바이트 장벽보다 클 때 전에이 문제를 했어. 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