我们将命名空间配置为仅在几分钟内默认ttl将数据存储在内存中。在开始将一些数据放入其中之后,当到期时,我们将在日志中获取这些消息(很多,约30%的过期记录):
 
 WARNING(namespace) :(namespace.c :: 762)set_id 1 - n_bytes_memory变为负数!

我有一个简单的客户端应用程序,可以重现服务器配置这: https://github.com/akkomar/aerospike-test (它基于码头工具和很容易入手)


任何建议可能是什么原因?


编辑:


我在版本3.6.4,3.7.0.1和3.7.4
&#xA;&#xA;用于测试的配置文件(来自< a href =“https://github.com/akkomar/aerospike-test/blob/master/etc/aerospike.conf”rel =“nofollow”> https://github.com/akkomar/aerospike-test/blob/ master / etc / aerospike.conf ):
&#xA;&#xA; service {&#xA;用户root&#xA; group root&#xA; paxos-single-replica-limit 1&#xA; pidfile /var/run/aerospike/asd.pid
服务线程4&#xA;交易队列4&#xA; transaction-threads-per-queue 4&#xA; proto-fd-max 1024&#xA;}&#xA;&#xA; logging {&#xA;文件/var/log/aerospike/aerospike.log {&#xA;上下文任何信息&#xA; }&#XA;控制台{&#xA;上下文任何信息&#xA;上下文命名空间详细信息&#xA; }&#xA;}&#xA;&#xA;网络{&#xA;服务{&#xA;解决任何&#xA;港口3000&#xA; }&#XA;心跳{&#xA;模式网格&#xA;港口3002&#xA; mesh-port 3002&#xA;间隔150&#xA;超时10&#xA; }&#XA;面料{&#xA;港口3001&#xA; }&#XA;&#XA;信息{&#xA;港口3003&#xA; }&#xA;}&#xA;&#xA; namespace test_ns {&#xA;复制因子2&#xA;内存大小1G&#xA; default-ttl 10S&#xA;&#xA;存储引擎内存&#xA;}&#xA;
&#xA;&#xA; Edit2:
&#xA;&#xA;似乎只有当我通过UDF更新记录时才会发生这种情况。最简单的再现:
&#xA;&#xA; local VAL_KEY =“v”&#xA;&#xA; function add_data(rec,val_to_add,ttl_to_set)&# XA;如果空气动力学:存在(rec)那么&#xA; rec [VAL_KEY] = val_to_add&#xA;&#xA;塞式:更新(REC)&#XA;否则&#XA; rec [VAL_KEY] = val_to_add&#xA;&#xA;塞式:创建(REC)&#XA;结束&#xA;&#xA;结束&#xA;
&#xA;&#xA; 当我通过Java API执行相同的操作时 - 一切似乎都运行正常(例如github repo前面提到的更新了Java API示例)
&#xA;答案 0 :(得分:1)
错误消息的含义是我们在内存中占用的空间变为负数,这是不可能的。
这已记录在我们的内部错误跟踪系统中,以便在将来的版本中解决
答案 1 :(得分:1)
原来这是Aerospike中的一个错误。 它在版本3.7.4.1(https://discuss.aerospike.com/t/problem-with-expiring-records-in-memory-only-namespace-n-bytes-memory-went-negative/2560/6中的详细说明)
中得到修复