Php
Mongo 連接失敗並顯示“傳輸端點未連接”
我有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 日誌才能確定,但是做兩件事可以解決兩個最常見的原因:
- 檢查客戶端和伺服器上的 ulimits(打開文件太多的頁面是一個好的開始)
- 降低你的tcp_keepalive_time從預設值(再次客戶端和伺服器)
對於負載測試,您應該將 ulimit 設置(-n -u 等)設置為超過 20,000 - 這是目前 MongoDB 內部對打開文件描述符的限制。您可能還想確保您正在執行的 Apache 使用者在其 ulimit 設置方面同樣可以確定您正在使用 PHP。
查看的輸出
lsof
應該可以為您提供有關打開文件描述符來自何處的線索。