Symfony3 / Doctrine是否为每个访问者打开一个MySQL连接?

时间:2016-06-07 21:04:16

标签: mysql symfony doctrine-orm

所以我用Symfony3Doctrine开发了这个网站。我对MySQL的性能有一个主要的担忧,更具体地说是同时打开连接的数量。

目前,网站上有一到五个用户在线。如果,让我们说,1,500用户在一分钟内连接会发生什么? Symfony3或Doctrine是否处理这种情况?我怎么能确定网站没有向我提供Too many connections MySQL错误?

如果我去5,00010,000?服务器有4GB个RAM和2.40Ghz单核处理器,但我不担心硬件,因为我更关心MySQL。

这些情况在过去已经发生,但我使用Wordpress和W3 Total Cache插件运行网站。我应该考虑使用缓存管理器,例如memcached还是其他?

简而言之,我担心网站在突发性高流量时变得不可用(并且首先想到了MysQL Too many connections错误,但我可能会遗漏一些更重要的东西。)

感谢我对这个问题的解决,因为我并不完全了解Symfony的性能问题。

2 个答案:

答案 0 :(得分:5)

我相信每个访问者都会打开一个连接。无论它是否存在,但Symfony或Doctrine都没有灵丹妙药来处理每个负载/连接场景。

为什么不使用负载测试工具(有很多)并看看它实际上是如何实现的?根据我的经验,预测瓶颈是没用的,因为它们总是会出现在你最不期望的地方。

例如,MySQL连接限制只是优化难题的一部分。仅仅担心连接限制并不好,您需要尽可能快速有效地响应Web请求,以释放MySQL连接资源(以及您的应用正在使用的其他资源)。因此,如果您的服务器速度很慢,那么无论MySQL连接限制如何,您都将在负载很大的情况下立即耗尽连接(或其他一些资源)。

也就是说,那些服务器规格似乎有点低,每分钟5-10k用户。我不希望这样的机器能够处理这种负载,而无需进行一些严格的优化/缓存等。

symfony performance page是一个很好的首发,而且还有一个很好的article on caching - 关于这个主题的ton of available material。祝好运! :)

答案 1 :(得分:0)

如果使用php-fpm,则取决于fpm / pool.d / www.conf中的pm.max_children。

pm.max_children 是指允许在此类池中存在的最大并发PHP-FPM进程数。如果传入请求的数量需要创建比max_children限制允许的数量更多的PHP-FPM进程,那么这些额外的请求将在队列中积压以等待服务。

所以当pm.max_children> max_connections(my.cnf)和活跃用户>您将获得max_connections"连接太多"。