我有一个Q=256, N=3, R=2, W=2的 BigCouch 集群。一切似乎都已启动并正在运行,我可以读写小型测试文档。该应用程序使用 Python 并使用 CouchDB 库。集群有 3 个节点,每个节点都在 vxware 上的 CentOS 上,每个节点有 3 个内核和 6GB RAM。BigCouch 0.4.0、CouchDB 1.1.1、Erlang R14B04、Linux 版本 CentOS Linux 版本 6.0(最终版)在 EC2 上和 CentOS 版本 6.2(最终版)在 vmware 5.0 上。
启动应用程序尝试使用 412 个文档和总共 490KB 的数据进行批量插入。这适用于N=1,因此内容没有问题。但是当N=3我似乎随机得到以下结果之一:
- 写入在大约 9 秒内完成
- 写入在大约 24 秒内完成(中间没有任何时间)
- 大约 30 秒后写入失败(插入了一些文档)
- 大约 30 秒后 Erlang 崩溃(插入了一些文档)
vmstat显示接近 100% 的 CPU 利用率,top 显示这主要是 Erlang 进程,truss 显示这主要用于“futex”调用。磁盘使用率在操作过程中上下跳跃,但 CPU 保持固定不变。
日志显示可爱的消息,例如:
“无法加载验证功能 {{badmatch, {error, timeout}}, [{couch_db, '-load_validation_funs/1-fun-1-', 1}]}”
“节点 'bigcouch-test02@bigcouch-test02.oceanobservatories.org' 上的进程 <0.13489.10> 出错,退出值:{{badmatch,{error,timeout}},[{couch_db,'-load_validation_funs/1-fun -1-',1}]}"
当然还有 Erlang 转储。
从阅读其他人使用 BigCouch 的信息来看,这当然不是一个大的更新。我们的虚拟机似乎足以胜任这项工作。我可以用 cURL 和 JSON 文件重现,所以它不是应用程序。(如果有帮助也可以发布。)
谁能解释为什么 9 核和 18GB RAM 不能处理(3x)490KB 写入?
如果有帮助,请提供更多信息:
- bigcouch.log条目,包括更长的崩溃报告
- 重复导致失败的JSON 条目
- 来自 EC2 机器m1.small的 erl_crash.dump 试图分配 500mb 堆
可以使用命令重现:将上面的 JSON 条目下载为 file.json
url=http://yourhost:5984
curl -X PUT $url/test
curl -X POST $url/test/_bulk_docs -d @file.json -H "Content-Type: application/json"