Php

Mongo 連接失敗並顯示“傳輸端點未連接”

  • February 24, 2014

我有2台伺服器安裝。

一個帶有 Apache 的 Web 伺服器和一個帶有 MongoDB 的數據庫伺服器。

我正在對其進行負載測試,並且在 ~300 RPS 上出現此錯誤:

PHP 致命錯誤:未擷取的異常 ‘MongoConnectionException’ 帶有消息’傳輸端點未連接’。

我唯一注意到的是,在失敗之前,我在 Mongo 上獲得了很多連接:

insert  query update delete getmore command flushes mapped  vsize    res faults locked % idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 
    0    659      0      0       0       1       0   208m  1.28g    40m      0        0          0       0|0     0|0    62k   217k   486   03:57:20 

這裡有近 500 個連接……但絕不會超過這個!

Mongo 是 2.0.3。PHP 是 5.3.x(最新的 Debian 安裝…)

幫助!

我真的需要在這裡查看 mongod 日誌才能確定,但是做兩件事可以解決兩個最常見的原因:

  1. 檢查客戶端和伺服器上的 ulimits(打開文件太多的頁面是一個好的開始)
  2. 降低你的tcp_keepalive_time從預設值(再次客戶端和伺服器)

對於負載測試,您應該將 ulimit 設置(-n -u 等)設置為超過 20,000 - 這是目前 MongoDB 內部對打開文件描述符的限制。您可能還想確保您正在執行的 Apache 使用者在其 ulimit 設置方面同樣可以確定您正在使用 PHP。

查看的輸出lsof應該可以為您提供有關打開文件描述符來自何處的線索。

引用自:https://dba.stackexchange.com/questions/23540