2017-03-02 15 views
1

Google Cloud에서 Aerospike 클러스터를 실행 중입니다. this post에 대한 권장 사항에 따라 마지막 버전 (3.11.1.1)으로 업데이트하고 모든 서버를 다시 작성했습니다.Aerospike 오류 : 모든 일괄 처리 대기열이 가득합니다.

enter image description here

때문에 : 사실,이 변화는 지금은 노호 그래프에 표시로, 20 %에, 그것은 이전에 약 75 % 부하했다 (제 5 개 서버가 훨씬 낮은 CPU 부하에서 작동하게 .을 변경 추천,

All batch queues are full

나는이 discussion about the topic 발견이 저 부하, 나는 4 개 서버 클러스터의 크기를 줄이기로 결정 내가 이런 짓을 할 때, 내 응용 프로그램은 다음과 같은 오류가 발생하기 시작 매개 변수 012 본인은 (2,4,8,16에 배치 인덱스 스레드) 값의 여러 조합을 시도

asadm -e "asinfo -v 'set-config:context=service;batch-index-threads=NEW_VALUE'"

명령 그들 중에 함께 39,및 batch-max-unused-buffers 문제를 해결하고, 또한 batch-index-threads PARAM 변경 . 아무것도 내 문제를 해결하지 못합니다. 계속 All batch queues are full 오류가 발생합니다. 나는 이러한 서버에 300기가바이트 SSD 디스크를 사용

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 
} 

:

은 여기 내 aerospace.conf 관련 정보입니다. 또는 관련된되지 않을 수도 있습니다

+1

디스크 IOPS 한도에 도달했다는 의혹이 있습니다. 제한을 초과하면 일괄 처리 작업이 디스크 IO에서 시간을 보냅니다. 이것은 aerospike가 많은 작업을 수행 할 수 없기 때문에 CPU 사용률을 감소시킵니다.as-config ": config = config : context = namespace; id = test; enable-benchmarks-batch-sub = true '"를 수행하여 세부 정보 일괄 벤치 마크를 활성화 할 수 있습니까? 일괄 호출이 대부분의 시간을 보내는 곳에 대한 세부 정보를 제공합니다. – sunil

답변

2

빠른 참고 :

A common mistake we have seen in the past is that developers decide to use 'batch get' as a general purpose 'get' for single and multiple record requests. The single record get will perform better for single record requests.

그것은 당신이 클라이언트와 서버 사이의 네트워크에 의해 제약되고있는 가능성이 있습니다. 5에서 4 노드로 줄이면 집계 파이프가 줄어 들었습니다. 또한 노드를 제거하면 클러스터 마이그레이션이 시작되어 추가 네트워크로드가 추가됩니다.

+0

내 클라이언트가 1CPU 서버이므로 2Gbps로 제한됩니다. 네트워크 모니터링 그래프에서이 서버는 150MB (1.2Gbps)로 작동하며 상한선과는 거리가 멀습니다. 내 서버는 8Gbps에 국한되어 있으며 600MB (4.8Gps)로 작동하며 현재까지는 모자를 씌우고 있습니다. (https://cloud.google.com/compute/docs/networks-and-firewalls#egress_throughput_caps) –

1

구성 매개 변수는 batch-max-buffer-per-queue입니다. 만약도 batch-max-unused-buffers 1 + X batch-max-buffer-per-queuebatch-index-threads에 (적어도)을 마련 할 것이다 (255)의 디폴트 값으로 현재 상승과 함께

Maximum number of 128KB response buffers allowed in each batch index queue. If all batch index queues are full, new batch requests are rejected.

. 그렇게하지 않으면 새로운 (사용되지 않은) 버퍼의 양이 사용중인 버퍼의 양보다 적으므로 새로운 버퍼가 만들어지고 끊임없이 파괴됩니다. 일괄 처리 응답이 제공되는 순간 시스템은 사용되지 않은 최대 수까지 버퍼를 트리밍하려고 노력할 것입니다. 이 수치는 지속적으로 증가하는 수치 인 batch_index_created_buffers에 반영됩니다.

충분한 DRAM이 있어야합니다. 예를 들어, 당신은 (320)에 batch-max-buffer-per-queue 당신이 당 노드 batch-max-unused-buffers이 1,625메가바이트 (1.59GB)의 최대 메모리 소비를해야합니다 13000로 설정해야합니다 성능을 위해서

40 (`batch-index-threads`) x 320 (`batch-max-buffer-per-queue`) x 128K = 1600MB 

소모됩니다 제기합니다.

+0

'batch-max-unused-buffers'를 21000 (40 * 512) + 일부 버퍼로 변경했지만 문제가 지속됩니다. 여전히 동일한 오류가 발생하고'batch_index_created_buffers'가 지속적으로 증가하고 있습니다. –

+0

사용하지 않는 버퍼가 충분하지 않다는 신호이지만, 왜 'batch-index-threads' x'batch- max-bugger-per-queue' ... 매개 변수 설정을 다시 확인할 수 있습니까? –

+0

그런데이 기술 자료 문서는이 주제를 다룹니다. https://discuss.aerospike.com/t/batch-full-error/4329 –