Couchdb 为什么在增加max“u dbs”u open后,复制仍然会失败,并带有;增加最大开度;?

Couchdb 为什么在增加max“u dbs”u open后,复制仍然会失败,并带有;增加最大开度;?,couchdb,Couchdb,我们的应用程序使用CouchDB筛选复制在用户数据库和主数据库之间移动数据。随着用户数量的增加,复制开始失败,出现此消息 Source and target databases out of sync. Try to increase max_dbs_open at both servers. 我们已经这样做了,将max_dbs_open的数量增加到了一个高得离谱的数字(10000),但是失败和消息保持不变。很明显,还有别的问题。有人知道这是什么吗?事实证明,增加max\u dbs\u ope

我们的应用程序使用CouchDB筛选复制在用户数据库和主数据库之间移动数据。随着用户数量的增加,复制开始失败,出现此消息

Source and target databases out of sync. Try to increase max_dbs_open at both servers.

我们已经这样做了,将max_dbs_open的数量增加到了一个高得离谱的数字(10000),但是失败和消息保持不变。很明显,还有别的问题。有人知道这是什么吗?

事实证明,
增加max\u dbs\u open
的信息充其量只是一个部分答案,最坏的情况是误导。在我们的例子中,问题不在于打开的数据库的数量,而在于我们的许多复制所使用的HTTP连接的数量

每个复制可以使用
min(worker\u进程+1,http\u连接)
其中
worker\u进程
是分配给每个复制的工作进程数,
http\u连接
是分配给每个复制的最大http连接数,如上所述

因此,使用的连接总数为

number of replications * min(worker_processes + 1, http_connections)
worker\u进程的默认值为4,
http\u连接的默认值为20。如果有100个复制,则复制使用的HTTP连接总数为500。另一个设置,
max_connections
,确定CouchDB服务器允许的最大HTTP连接数,如前所述。默认值为2048

在本例中,每个用户都有两个复制—一个从用户复制到主数据库,另一个从主数据库复制到用户。因此,在我们的例子中,使用默认设置,每次添加一个用户时,我们都会添加额外的10个HTTP连接,最终通过默认的
max\u连接

由于我们的复制非常少,并且只有少量数据从用户移动到主机,从主机移动到用户,因此我们拨回了
工作进程的数量
http\u连接
,增加了
最大连接数
,一切正常

更新

还有一些其他的发现

  • 有必要在进程上提升ulimit,以允许它有更多的开放连接

  • 创建复制过快也会导致问题。如果我回拨创建新复制的速度,这也有助于缓解问题。ymmv


  • 对我来说,产生此错误是因为目标数据库通过
    GET/{targetDB}/
    返回的“instanceStartTime”无效。

    此问题是因为每个用户数据库和主数据库的复制在两个不同的CouchDB进程之间引起的吗?我正试图做一些类似的事情,但是用户数据库和主数据库托管在同一台服务器上,所以我希望避免使用任何IPC。