2011-08-20 92 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