2

我是 Couch 的新手,并且继承了一个中型项目,该项目在大约 70 个客户端 Android 手机(所有 HTC Desire S)上使用 CouchBase Mobile(开发人员预览版 V2.0),然后与主 CouchDB 服务器同步。

不幸的是,构建系统的人已经不在了,所以我正在寻求社区的帮助。

我的观察:

  • 客户端电话似乎处于调用复制、然后失败、然后重新调用复制、失败等几乎恒定的状态。除了无法从服务器拉取新数据之外,它还消耗过多的电池力量。
  • 服务器明显负担过重。Erlang 和 Couch 占用了大量的 CPU 和内存。
  • 当服务器负担较轻时,复制似乎可以正常工作。例如,在重新启动 CouchDB 服务后,复制可以正常工作一段时间。

我的假设:

  • 对我来说,这听起来像是一个负载平衡问题。随着服务器变得繁忙,越来越多的客户端复制失败,然后它们只是更频繁地请求复制,使问题变得更糟。

我如何尝试修复它:

  • 在客户端的 CouchBase“default.ini”文件中,我编辑了以下内容,试图限制客户端调用复制的频率。

    • max_replication_retry_count = 1
    • http_connections = 5
    • 连接超时 = 60000

尽管如此,我仍然可以看到 CouchBase 在 LogCat 中逐渐消失,不断尝试但未能复制。

谁能建议我如何开始调试它,以便更有效地隔离问题?指出我正确的方向?...非常感谢。



这是来自 LogCat 09-28 12:48:48.593的复制错误"0284a8a927077abfd2b86a2616e07fed":I/CouchDB(4468): [info] [<0.8140.0>] Replication is using:
09-28 12:48:48.593: I/CouchDB(4468) ):4 个工作进程
09-28 12:48:48.593:I/CouchDB(4468):工作批量大小为 500
09-28 12:48:48.593:I/CouchDB(4468):5 个 HTTP 连接
09-28 12 :48:48.593: I/CouchDB(4468): 连接超时 60000 毫秒
09-28 12:48:48.593: I/CouchDB(4468): 套接字选项是: [{keepalive,true},{nodelay,false} ]
09-28 12:48:48.593: I/CouchDB(4468): 源开始序列 4971
09-28 12:48:49.824: I/CouchDB(4468): [info] [<0.8140.0>] 文档funf_client_to_server_49fd7812-409d-47df-a1cd-888db15a24ae触发复制0284a8a927077abfd2b86a2616e07fed
09-28 12:48:49.834: I/CouchDB(4468): [info] [<0.8139.0>]0284a8a927077abfd2b86a2616e07fed在 <0.8140.0> ( funf-> https://*****@monarca.dk:5984/monarca_funf/)开始新的复制
09-28 12:48:51.225: E/ CouchDB(4468):[错误] [<0.8140.0>] ChangesReader 进程因原因死亡:{file_corruption,
09-28 12:48:51.225: E/CouchDB(4468): <<"file corruption">>}
09 -28 12:48:51.225:E/CouchDB(4468):[错误] [<0.8140.0>] 复制0284a8a927077abfd2b86a2616e07fed( funf-> https://*****@monarca.dk:5984/monarca_funf/) 失败:
changes_reader_dieed 09-28 12:48:51.245:I/CouchDB(4468):[ info] [<0.8149.0>] 重试 POST 请求到 https:// * @monarca.dk:5984/monarca_funf/_revs_diff 在 0.25 秒内由于错误关闭_on_request
09-28 12:48:51.245: I/CouchDB(4468): [info] [<0.8148.0>] 重试 POST 请求到 https:// * @monarca.dk:5984/monarca_funf/_revs_diff 在 0.25 秒内由于错误关闭_on_request
09-28 12:48:51.476:E/CouchDB(4468):[错误] [<0.298.0>] 复制错误0284a8a927077abfd2b86a2616e07fed(由文档触发funf_client_to_server_49fd7812-409d-47df-a1cd-888db15a24ae):changes_reader_died


这是有问题的复制文档。
{"_id":"funf_client_to_server_49fd7812-409d-47df-a1cd-888db15a24ae","_rev":"825-082674db3441880a23d6b6aa51be7e3e","target":"https:// * @monarca.dk:5984/monarca_funf","continuous" :false,"source":"funf","filter":"monarcaandroid/deletefilter","_replication_id":"3dfdfca7dfd47d9352c9048497660e4c","_replication_state":"error","_replication_state_time":"2012-09-28T12:51: 25+02:00"}


这是复制文档引用的“删除过滤器”。

"function(doc) {\n  return !doc._deleted;\n}"
4

3 回答 3

0

错误日志显示“文件损坏”;可能暗示某些沙发数据库损坏。您可能想查看您的 _replicator 数据库是否有任何损坏。

于 2014-03-25T18:00:48.053 回答
0

更好地使用_replicator数据库进行复制。它将免费为您重新尝试复制。重新尝试复制之前的延迟呈指数增长。

可从这里获得的信息

于 2012-10-01T14:29:52.070 回答
0

因为它是android上的couchbase mobile,我认为它基于couchdb 1.1或早期的couchdb 1.2。这可能是在您尝试的设置(max_replication_retry_count、http_connections 和 connection_timeout)登陆 couchdb 1.2 发行版之前。这只是一个猜测。您可能想要 1) 升级您的 couchdb/couchbase 版本(如果您发现更高版本,请告诉我们所有人),或 2) 只需有一个计时器任务在后台执行单个复制。

于 2012-09-30T05:51:47.753 回答