2012-08-29 5 views
12

난 그냥이 설정은 무엇을 의미 하는가 RabbitMQ의 설정 세부 사항에보고RabbitMQ + 메모리 제한

[{rabbit, [{vm_memory_high_watermark, 0}, 
      {disk_free_limit, {mem_relative, 1.0}} 
      ] 
}] 

건너 온거야?

vm_memory_high_watermark을 0으로 설정하면 => rabbitmq 앱이 즉시 시작되는 모든 게시자를 차단합니까? 그러나 우리는 여전히 우리가 보내는 모든 메시지를 대기열에 넣을 수있는 rabbitmq를 본다.

16720 rabbitmq 20 0 142m 62m 2408 S 0 **1.6** 0:06.88 beam.smp 

는 때마다 우리는 우리 자체가 증가하고이 프로세스의 메모리 사용 브로커에 MSG를 보냅니다. 그래서, 워터 마크가 0으로 설정되었지만 msg가 메모리에 있음을 의미합니까?

램의 메모리 한도에 도달하고 여전히 메시지가 전송되는 경우 어떤 일이 발생하는지 알고 싶습니다. 게시자가 차단 되었습니까? 또는 사용 가능한 경우 메시지가 디스크로 스왑됩니다.

답변

13

vm_memory_high_watermark는 RabbitMQ의 메모리 흐름 제어와 관련된 백분율 값입니다. 당신이 Memory flow control에서 살펴 경우

당신은 "메모리 기반 흐름 제어"제목 아래는 말한다 것을 볼 수 있습니다 :

RabbitMQ 서버가 시작할 때 컴퓨터에 설치된 RAM의 총량을 감지하고 rabbitmqctl set_vm_memory_high_watermark fraction이 실행될 때. 기본적으로 RabbitMQ 서버가 설치된 RAM의 40 % 이상을 사용하면 메모리 알람이 발생하고 모든 연결이 차단됩니다. 메모리 경보가 해제되면 (예 : 디스크에 대한 서버 페이징 메시지 또는 클라이언트로 전달하는 메시지로 인해) 정상적인 서비스가 재개됩니다.

이 값을 0으로 설정하면 당연히 트리거됩니다. RabbitMQ가 더 많은 메모리를 사용할 수있게하려면 값을 증가시키고 싶을 것입니다.

또 다른 중요한 참고 :

기본 메모리 임계 값은 설치된 RAM의 40 %로 설정됩니다. 이것은 RabbitMQ 서버가 40 % 이상을 사용하는 것을 막지는 못하나, 게시자가 조절되는 지점 일뿐입니다.

알람이 발생했을 때 메시지를 게시하려고하면 게시자가 메시지를 보내지 못하게됩니다.

:

당신은 당신이 당신이 '사용 안 함'메모리 기반 흐름 제어는 다음 링크 위에서 100 페이지의 세부 사항에 vm_memory_high_watermark을 설정하려면 0으로 vm_memory_high_watermark을 설정하는 모든 게시자 차단하려면

0 값을 지정하면 메모리 경보가 즉시 해제되므로 모든 게시가 비활성화됩니다 (게시를 전역 적으로 사용하지 않으려면 rabbitmqctl set_vm_memory_high_watermark 0을 사용하십시오). 메모리 알람이 전혀 꺼지지 않게하려면 100과 같이 몇 배 높은 배수를 설정하십시오.

+0

나는 그 문서를 보았습니다. 억제 된 [msg의 %가 삭제 될 수 있음] 및 차단 된 [msgs를 보낼 수 없음]은 무엇을 의미합니까? 0 %를 지정하면 앱이 시작될 때 알람이 켜져 야합니다. 모든 게시자 메시지는 차단되어야합니다. 또는 조절 했습니까? 메모리 기반 흐름 제어 [0 %]를 완전히 비활성화 한 경우 어떻게됩니까? – Tamil

+1

이 상황에서 스로틀하면 게시자가 완전히 차단됩니다 (알람이 트리거 되었기 때문에). 0 %를 지정하면 올바른 것입니다. 알람이 울리고 모든 게시자가 차단됩니다. 메모리 기반 흐름 제어를 사용하지 않으려면 값을 100으로 설정하고 0은 모든 것을 막을 것입니다 – kzhen

+0

내 대답을 업데이트했습니다 – kzhen