Erlang Riak数据库在短时间内失败

Erlang Riak数据库在短时间内失败,erlang,riak,Erlang,Riak,我创建了一个简单的erlang应用程序,它定期收集所需数据并将其放入riak数据库中 当我启动应用程序时,它运行平稳。。但经过一段时间后,由于对riak数据库的PUT请求变得太慢,它会停止。。这是我的应用程序中的日志: 2013-06-26 12:44:09.090 [info] <0.60.0> data processed in [16476 ms] 2013-06-26 12:45:51.472 [info] <0.60.0> data processed in [

我创建了一个简单的erlang应用程序,它定期收集所需数据并将其放入riak数据库中

当我启动应用程序时,它运行平稳。。但经过一段时间后,由于对riak数据库的PUT请求变得太慢,它会停止。。这是我的应用程序中的日志:

2013-06-26 12:44:09.090 [info] <0.60.0> data processed in [16476 ms]
2013-06-26 12:45:51.472 [info] <0.60.0> data processed in [18793 ms]
...
2013-06-26 12:57:28.138 [info] <0.60.0> data processed in [15135 ms]
2013-06-26 13:07:01.484 [info] <0.60.0> data processed in [488420 ms]
2013-06-26 14:03:11.561 [info] <0.60.0> data processed in [3370075 ms]
2013-06-26 12:44:09.090[信息]数据处理时间为[16476毫秒]
2013-06-26 12:45:51.472[信息]在[18793毫秒]中处理的数据
...
2013-06-26 12:57:28.138[信息]在[15135毫秒]内处理的数据
2013-06-26 13:07:01.484[信息]在[488420毫秒]中处理的数据
2013-06-26 14:03:11.561[信息]在[3370075毫秒]中处理的数据
在riak崩溃日志中,我可以看到很多信息,如

2013-06-26 17:06:20 =CRASH REPORT====
crasher:
initial call: riak_kv_index_hashtree:init/1
pid: <0.13660.7>
registered_name: []
exception exit: {{{badmatch,{error,{db_open,"IO error: ./data/anti_entropy/
    433883298582611803841718934712646521460354973696/MANIFEST-000004: 
    Cannot allocate memory"}}}, [{hashtree,new_segment_store,2,
    [{file,"src/hashtree.erl"},{line,499}]},
    {hashtree,new,2,[{file,"src/hashtree.erl"},{line,215}]},
    {riak_kv_index_hashtree,do_new_tree,2,
    [{file,"src/riak_kv_index_hashtree.erl"},
    {line,426}]},{lists,foldl,3,[{file,"lists.erl"},
    {line,1197}]},{riak_kv_index_hashtree,
    init_trees,2,[{file,"src/riak_kv_index_hashtree.erl"},
    {line,368}]},{riak_kv_index_hashtree,init,1,
    [{file,"src/riak_kv_index_hashtree.erl"},
    {line,225}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},
    {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]},
    [{gen_server,init_it,6,[{file,"gen_server.erl"},{line,328}]},
    {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}
ancestors: [<0.955.0>,riak_core_vnode_sup,riak_core_sup,<0.129.0>]
messages: []
links: []
dictionary: []
trap_exit: false
status: running
heap_size: 1597
stack_size: 24
reductions: 593
neighbours:
2013-06-26 17:06:20=事故报告====
撞车者:
初始调用:riak_kv_index_hashtree:init/1
pid:
注册名称:[]
异常退出:{{{{badmatch,{error,{db_open,“IO错误:./data/anti_/
4338832985826118038417189347126465121460354973696/舱单-000004:
无法分配内存“}},[{hashtree,new_segment_store,2,
[{file,“src/hashtree.erl”},{line,499}]},
{hashtree,new,2,[{file,“src/hashtree.erl”},{line,215}]},
{riak_kv_index_hashtree,do_new_tree,2,
[{文件,“src/riak_kv_index_hashtree.erl”},
{line,426}]},{lists,foldl,3,[{file,“lists.erl”},
{line,1197}]},{riak_kv_index_hashtree,
init_树,2,[{文件,“src/riak_kv_index_hashtree.erl”},
{line,368}]},{riak_kv_index_hashtree,init,1,
[{文件,“src/riak_kv_index_hashtree.erl”},
{line,225}]},{gen_server,init_it,6,[{文件,“gen_server.erl”},{line,304}]},
{proc_lib,init_p_do_apply,3,[{file,“proc_lib.erl”},{line,227}]},
[{gen_server,init_it,6,[{file,“gen_server.erl”},{line,328}]},
{proc_lib,init_p_do_apply,3,[{file,“proc_lib.erl”},{line,227}]}
祖先:[,里亚克尔邦,里亚克尔邦,]
信息:[]
链接:[]
字典:[]
陷阱_出口:错误
状态:正在运行
堆大小:1597
堆栈大小:24
减少:593
邻居:
我可以在AmazonAWS和本地虚拟机上看到相同的行为。我的虚拟机非常小,512-1024MB。。AWS是微型的,所以它具有相同的内存量

当前没有群集。只有一个节点,上面运行Riak和我的应用程序

我查看了riak文档,他们建议做的基本事情是增加ulimit和更新sysctl。因此,我的服务器ulimit显示:ulimit-n65536和sysctl按照建议进行了更新

我试过bitcask和eleveldb,但结果是一样的

目前,我不知道什么是坏的,为什么riak不能分配内存。。
谢谢。

1GB的RAM对于Riak节点来说非常小,如果您在那里运行应用程序,则更是如此。Riak中的默认设置是针对具有相当多RAM和处理能力的环境的,因此您需要调整默认设置以使其正常工作。以下是一些可能有帮助的建议:

  • 由于您只有一个节点,请通过设置禁用AAE {反熵,{off,[]}
  • 减小环的尺寸。这将限制您的扩展能力,但很可能是使其工作所必需的。合适的起始值可能是16,但也可能低至8
  • 更改默认存储桶属性,使n_valrwdwrw都设置为1,否则将向磁盘写入每条记录的多个副本。当您向外扩展并添加更多节点时,需要增加这些节点
  • 由于bitcask要求所有密钥都保存在内存中,因此最好将其用作后端。但是,您很可能需要显著减少写缓冲区和缓存的大小。您可能需要进行实验以找到合适的级别
  • 由于此环境很可能太小,无法在任何情况下运行mapreduce,因此您还可以将map_js_vm_countreduce_js_vm_count配置参数设置为0,以节省一些额外内存

  • 每个put请求有多大?“每秒有多少个?”Ⅎ Put请求很小。实际上,它是json格式的小数组。每秒大约有20-30个请求。嘿!你为什么不选我?任何人都可以投否决票。这很可能是因为(从选民的角度来看)研究得不好或写得不好。没有一个用户可以控制这一点。我建议你改进你的职位,也许你能获得更多的选票。@Muzaaya Joshua谢谢你。。我会尽力从里亚克社区得到帮助。不幸的是,他们更喜欢使用邮件列表,使用起来不太舒服。谢谢!非常详细和有用的答案!事实上,即使是第(1)点也解决了我的问题。一旦我禁用了anti_熵,Riak即使在512 mb虚拟机上也能完美运行。因为目前我不使用集群,所以我可以禁用反熵。