2011-08-20 51 views
10

我使用doctrine 2 PDO與MySQL。Doctrine 2關閉連接

當壓力測試服務器時,mysql會報告大量中止的連接(最多20%)。

我試圖找到問題。

Mysql手冊建議確保與數據庫的連接正確關閉。 http://dev.mysql.com/doc/refman/5.0/en/communication-errors.html

如果doctrine實際上關閉連接或不使用持久連接,我無法找到任何信息。

另外,還有什麼可以解釋中止連接嗎?我在這裏迷路了。

PS。服務器是Ubuntu 10.04,Nginx 1.x,PHP 5.3.5(fpm)和MySQL 5.1.41

+0

Doctrine2手冊建議使用APC或其他緩存機制。未能提供一個可能會導致很多連接。你有什麼? – J0HN

+1

連接緩存? – iBiryukov

+0

我有用於元數據和查詢的APC緩存。你有鏈接到他們描述如何緩存連接的手冊嗎? – iBiryukov

回答

21

從我所觀察到的,Doctrine使用持續連接。

我們偶然發現了一個問題,在symfony2中啓動單元測試,其中數據庫被垃圾郵件連接處於「睡眠」狀態。這對我們工作的解決方案:

$entityManager->getConnection()->close(); 
+1

當你致電關閉時,你能告訴我嗎?我們嘗試在kernel.terminate或kernel.response事件中執行此操作,但連接仍然掛在mysql中。 – Vail

+1

我在單元測試中使用它,所以它在tearDown方法中。對不起,我幫不了你。 – wdev

+0

我仍然看到打開的連接列表增長。: -/ – sensorario

1

我有同樣的問題,

$entityManager->getConnection()->close(); 

似乎工作,但如果加入一些PHP版本的作品「好」

gc_collect_cycles() 

關閉連接後。 我仍然有這樣的問題,在較舊的PHP版本,可能是與垃圾收集器相關的東西,我猜。 會及時告訴大家,如果我找到我發現這個調整所有PHP版本

+0

在我的情況下,gc_collect_cycles()在執行PHPUnit測試期間解決了我的'太多連接'錯誤 – Davincho