2014-02-25 138 views
3

我使用PHP mongoclient類與mongodb遠程主機連接。MongoClient PHP sript永遠運行

我沒有寫什麼特別簡單但簡單的連接代碼。

$connection_url = "mongodb://{$dbuser}:{$dbpass}@{$dburl}:{$dbport}/{$dbname}";   
$this->m = new MongoClient($connection); 

它連接到MongoDB的,但一段時間後,我的應用程序掛起,通過掛起我的意思是PHP sript一直運行下去,沒有任何反應,最後Apache和我的服務器崩潰。我需要重新啓動服務器才能重新啓動它。

爲什麼PHP腳本永遠運行並且mongoserver沒有響應。我的max_execution_time設爲30秒。

MongoClient版本1.4.5

更新:

正如所解釋的here 默認的連接插座超時的MongoDB是從不超時,我想,可能是PHP MongoClient正在等待永遠如果套接字從MongoServer端關閉。

爲了確保我已經爲mongoclient不等待5秒鐘以上的選項,如果關閉套接字,像下面

$connection_url = "mongodb://{$dbuser}:{$dbpass}@{$dburl}:{$dbport}/{$dbname}"; 
$options = array('connectTimeoutMS' =>5000 , 'socketTimeoutMS' => 5000); 
$this->m = new MongoClient($connection, $options); 

但是,這仍然掛

這裏是短蒙戈日誌

2:4:發現連接 ,某; - ; DBNAME /用戶/ fd6da21ee7cf37731eb88e250d4a05d6; 1957(尋找 爲,某; - ; DBNAME /用戶名/ fd6da21 ee7cf37731eb88e250d4a05d6; 1957) 2:2:mongo_get_read_write_connection:找到一個獨立的連接

2:4:發現連接 主機; - ; DBNAME /用戶名/ fd6da21ee7cf37731eb88e250d4a05d6; 1957(尋找 爲主機名; - ; dnname /用戶/ fd6da21ee7cf37731eb88e250d4a05d6 ; 1957)

2:2:is_ping:查驗 主機名; - ; DBNAME /用戶名/ fd6da21ee7cf37731eb88e250d4a05d6; 1957

沒有日誌 'is_ping' 之後。這意味着我的腳本在這裏掛起。

更新:

這裏是進程正在使用和運行的時候它掛

ps aux | sort -rk 3,3 | head -n 20 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
www-data 32612 0.0 1.1 108372 5604 ?  S 11:05 0:00 /usr/sbin/apache2 -k start 
www-data 32390 0.0 1.1 108372 5604 ?  S 11:04 0:00 /usr/sbin/apache2 -k start 
www-data 32389 0.0 1.4 109192 7348 ?  S 11:00 0:00 /usr/sbin/apache2 -k start 
www-data 32388 0.0 1.4 109192 7376 ?  S 11:00 0:00 /usr/sbin/apache2 -k start 
www-data 32387 0.0 1.4 109192 7376 ?  S 11:00 0:00 /usr/sbin/apache2 -k start 
www-data 32386 0.0 1.2 108412 6100 ?  S 11:00 0:00 /usr/sbin/apache2 -k start 
www-data 32385 0.0 1.8 111692 9432 ?  S 11:00 0:00 /usr/sbin/apache2 -k start 
www-data 31833 0.0 1.5 109216 7548 ?  S 02:35 0:00 /usr/sbin/apache2 -k start 
www-data 31173 0.0 1.5 108824 7872 ?  S Mar02 0:00 /usr/sbin/apache2 -k start 
www-data 15538 0.0 1.5 109216 7664 ?  S Mar02 0:00 /usr/sbin/apache2 -k start 
www-data 15536 0.0 1.4 109200 7496 ?  S Mar02 0:00 /usr/sbin/apache2 -k start 
www-data 15535 0.0 1.6 110904 8444 ?  S Mar02 0:00 /usr/sbin/apache2 -k start 
www-data 15534 0.0 1.3 108684 6536 ?  S Mar02 0:00 /usr/sbin/apache2 -k start 
whoopsie 847 0.0 0.5 187668 2676 ?  Ssl Feb24 0:00 whoopsie 
syslog  370 0.0 0.6 249676 3060 ?  Sl Feb24 0:31 rsyslogd -c5 
root  984 0.0 0.1 15792 908 tty1  Ss+ Feb24 0:00 /sbin/getty -8 38400 tty1 
root  946 0.0 2.0 108348 10120 ?  Ss Feb24 0:32 /usr/sbin/apache2 -k start 
root   9 0.0 0.0  0  0 ?  S Feb24 0:00 [rcu_bh] 
root  879 0.0 0.0  0  0 ?  S< Feb24 0:00 [kvm-irqfd-clean] 
+0

我也收到這個錯誤,我使用SSL,但我不認爲這個問題是SSL - 它只是套接字變成陳舊。如果我找到答案,我一定會在這裏爲你發佈。 – Ross

回答

0

聽起來像一個硬件問題或MongoDB的問題,服務器不應該需要任何重新啓動,如果有掛PHP腳本。 ..

但是,你可以嘗試分貝到這樣的選項添加用戶名密碼:

function __construct($host, $username, $password, $db){ 
    $this->client = new MongoClient("mongodb://" . $host, array('username' => $username, 'password' => $password, 'db' => $db)); 
    $this->db = $this->client->selectDB($db); 
} 
+0

嘗試過。這沒有任何改變。仍是同樣的問題。 –