我们发现自己遇到了这个问题。配置如下: -
user> (require '[clojure.zip :as z])
nil
user> (defn dfs [goal? tree]
(loop [curr (z/zipper coll? seq identity tree)]
(cond (z/end? curr) nil
(goal? (z/node curr)) (z/node curr)
:else (recur (z/next curr)))))
#'user/dfs
user> (dfs #{10} [1 [3 5 [7 9] [10] 11 12]])
10
user> (dfs #{100} [1 [3 5 [7 9] [10] 11 12]])
nil
user> (dfs (every-pred number? even?) [1 [3 5 [7 9] [10] 11 12]])
10
有人可以帮我们解决这个问题吗?这可能是什么原因?
答案 0 :(得分:3)
Aerospike只会写入免费区块。块可以包含适合的任意数量的记录。如果您的写入/更新模式使得块永远不会低于50%活动记录(碎片整理的默认阈值:defrag-lwm-pct
),那么您有一堆"空"无法利用的空间。在managing storage页面中阅读有关碎片整理的更多信息。
如果群集没有看到任何写入,则可以更轻松地从中恢复。您可以增加 defrag-lwm-pct,以便更多块符合条件并进行碎片整理。
另一个原因可能是硬盘速度不够快,无法跟上碎片整理。
您可以在Aerospike KB - Recovering from Available Percent Zero中详细了解可能的解决方案。不要读过去"停止节点上的服务......"
答案 1 :(得分:2)
您基本上没有对您的perisistence存储设备进行碎片整理(每个节点75GB)。从您发布的快照中,您在3个节点上有大约一百万条记录,其中有2100万条已过期。所以看起来你正在用非常短的ttl编写记录,并且碎片整理无法跟上。
当你处于以下状态时,你可以发布几行的输出:
$ grep defrag /var/log/aerospike/aerospike.log
和
$ grep thr_nsup /var/log/aerospike/aerospike.log
?
您的写入/更新负载是多少?我怀疑你只是创建简短的ttl记录和阅读,而不是更新。
根据您的工作情况,增加defrag-lwm-pct
可能会让您的情况变得更糟。我还会从默认的100微秒调整nsup-delete-sleep
,但这取决于上面的日志greps显示的内容。所以发布那些,让我们看看。
(编辑:此外,即使您在持久性存储上超过50%HWM,您也没有看到驱逐,这意味着您的nsup线程需要很长时间才能运行。这再次指向{{1}需要调整设置的值。)