2013-04-09 56 views
1

在多线程Web应用程序中调用ZODB.DBpool_size的合理默认值是什么?ZODB pool_size的合理设置

即使当我是唯一一个通过db交互处理程序进行导航时,离开实际默认值7也会给我一些连接WARNING。是否可以设置一个太高的数字?决定究竟是什么原因决定了哪些因素?

回答

3

游泳池的大小只是一个'准则';当您超过该尺寸时会记录该警告;如果您要使用double,则会注册一个CRITICAL日志消息的连接数。这些在那里表示你可能在你的应用程序中使用太多的连接。

当您关闭连接时,池将尝试减少保留连接到池大小的数量。

您需要将它设置为应用程序中的最大线程数。对于我认为Tornado几乎完全使用异步事件而不是线程化的Tornado来说,这可能很难确定;如果在Tornado中可配置最大并发连接数,则池大小需要设置为数字。

虽然,我不确定ZODB在您的应用程序扩展到数百或数千个并发连接时将如何执行。到目前为止,我只用了最多100个左右的并发连接,它们分布在几个进程甚至是机器上(使用ZEO或RelStorage来为这些进程提供ZODB服务)。

我想说,如果大多数这些连接只读,你应该没问题;它同时写在同一个对象上,这就是ZODB在可伸缩性方面的薄弱环节。

+0

我不希望这个特定的应用程序扩展到超过几十个同时连接(可能会写入2%-5%),但我开始在** 7发出警告只是有点令人担忧** 。 – Inaimathi 2013-04-10 13:45:07

+0

@Inaimathi:一个典型的Zope实例只使用一些线程来处理异步网络层后面的请求,因此它不需要很多并发连接,所以默认值很低。对于某些集群配置,我们甚至只将实例调整为2个线程,而是跨进程扩展,以避免GIL并更好地利用多核。 – 2013-04-10 13:58:37