我在Google Cloud中运行Aerospike群集。按照this post的建议,我更新到最新版本(3.11.1.1)并重新创建所有服务器。事实上,这种变化导致我5个服务器在低得多的CPU负荷工作(之前是75%左右的负载,现在是20%,为显示在图形波纹管:Aerospike错误:所有批次队列已满
因为。这种低负荷的,我决定簇的大小缩小到4台服务器。当我这样做,我的应用程序开始收到以下错误:
All batch queues are full
我发现这个discussion about the topic,建议改变参数batch-index-threads
和batch-max-unused-buffers
与
asadm -e "asinfo -v 'set-config:context=service;batch-index-threads=NEW_VALUE'"
我试图值的许多组合(分批索引线程与2,4,8,16)的命令,其中没有一个解决了这个问题,并且还改变batch-index-threads
PARAM 。没有解决我的问题。我一直收到All batch queues are full
错误。
这里是我的aerospace.conf相关信息:
service {
user root
group root
paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1.
paxos-recovery-policy auto-reset-master
pidfile /var/run/aerospike/asd.pid
service-threads 32
transaction-queues 32
transaction-threads-per-queue 4
batch-index-threads 40
proto-fd-max 15000
batch-max-requests 30000
replication-fire-and-forget true
}
我使用这些服务器上的300GB SSD硬盘。
我怀疑你正在达到磁盘IOPS限制。如果达到限制,批处理操作将花费时间在磁盘IO上。这也会降低CPU利用率,因为Aerospike无法执行大量工作。你可以通过执行启用详细信息批量基准:asadm -e“asinfo -v”set-config:context = namespace; id = test; enable-benchmarks-batch-sub = true'“。它将详细介绍批量调用大部分时间在哪里。 – sunil