RabbitMQ 흐름 제어 - 메모리 제어

3638 단어 RabbitMQ
RabbitMQ 서버 시작 및 실행 rabbitmqctl set_vm_memory_high_watermark fraction 명령은 컴퓨터에 설치된 RAM(메모리) 총량을 측정합니다.기본적으로 RabbitMQ 서버가 사용 가능한 RAM의 40%를 초과하면 메모리 경보가 울리고 발표 중인 모든 연결이 차단됩니다.메모리 경보가 지워지면 (예를 들어 서버가 메시지를 디스크에 쓰거나 클라이언트에게 배달하여 소비하고 배달 확인을 하기 때문에) 서비스가 정상적으로 회복됩니다.
기본 메모리 임계값은 설치된 RAM의 40% 로 설정됩니다.이것은 RabbitMQ 서버가 40퍼센트가 넘는 자원을 사용하는 것을 막지 않습니다. 이것은 발표자(생산자)에 대한 제한일 뿐입니다.최악의 경우, Erlang의 스팸 수집기는 사용하는 메모리 수를 배로 증가시킬 수 있습니다(기본적으로 80%의 RAM).OS 스왑 또는 페이지 파일을 활성화하는 것이 좋습니다.
32비트 시스템 단일 프로세스의 메모리 제한은 2GB로 설정됩니다.64비트 시스템의 일반적인 구현(예: AMD64 및 Intel EM64T)은 프로세스당 256TB만 허용합니다.64비트 Windows는 8TB로 제한됩니다.그러나 64비트 운영 체제에서도 32비트 프로세스는 보통 2GB의 최대 주소 공간만 사용합니다.즉, 메모리가 아무리 크더라도 기본 임계값은 2GB*0.4=0.8GB(820M 정도)입니다.

Configuring the Memory Threshold


프로파일을 편집하여 트리거 흐름 제어의 메모리 임계값을 조정할 수 있습니다.다음 예제에서는 임계값을 기본값 0.4로 설정합니다.
vm_memory_high_watermark.relative = 0.4 
[{rabbit, [{vm_memory_high_watermark, 0.4}]}]

기본값 0.4은 설치된 RAM의 40% 또는 사용 가능한 가상 주소 공간의 40% 를 나타냅니다.예를 들어, 32비트 플랫폼에서 4GB RAM을 설치한 경우 4GB의 40%는 1.6GB이지만 32비트 Windows는 일반적으로 프로세스를 2GB로 제한하기 때문에 실제 임계값은 2GB의 40%(820MB)입니다.
또는 노드에 사용되는 RAM의 절대 제한을 설정하여 메모리 임계값을 조정할 수 있습니다.다음 예제에서는 임계값을 1073741824바이트(1024MB)로 설정합니다.
vm_memory_high_watermark.absolute = 1073741824 
[{rabbit, [{vm_memory_high_watermark, {absolute, 1073741824}}]}]

메모리 단위 사용:
vm_memory_high_watermark.absolute = 1024MB
([{rabbit, [{vm_memory_high_watermark, {absolute, "1024MiB"}}]}])
 
vm_memory_high_watermark.absolute = 1GB

절대 제한이 설치된 RAM 또는 사용 가능한 가상 주소 공간보다 크면 임계값을 작은 제한으로 설정합니다.
RabbitMQ 서버가 시작되면 RABBITMQ_에 메모리 제한 정보가 인쇄됩니다.NODENAME.로그 파일:
=INFO REPORT==== 29-Oct-2009::15:43:27 ===
Memory limit set to 2048MB.

rabbitmqctlstatus 명령을 사용하여 메모리 제한을 조회할 수 있습니다.
에이전트가 rabbitmqctl set_를 사용할 때vm_memory_high_watermark fraction 명령 또는 rabbitmqctl set_vm_memory_high_watermark absolute memory_limit 명령이 실행될 때 한도값을 변경할 수 있습니다.이 명령에서도 메모리 단위를 사용할 수 있습니다.이 명령은 프록시 (broker) 가 닫힐 때까지 계속 적용됩니다.프록시가 다시 시작된 후에 해당하는 설정 설정을 변경해야 합니다.임계값을 변경하지 않고 이 명령을 실행하면 시스템 RAM의 총 수를 조회했기 때문에 핫플러그 RAM이 있는 시스템의 경우 메모리 제한이 변경될 수 있습니다.

Disabling All Publishing


값이 0이면 메모리 경고가 즉시 종료되어 모든 게시 연결이 막힙니다. (전역 게시를 사용하지 않으려면 유용할 수 있습니다.)rabbitmqctl set_ 사용하기vm_memory_high_watermark 0.

Limited Address Space


64비트 OS(또는 PAE가 있는 32비트 OS)의 32비트 Erlang VM에서 RabbitMQ를 실행할 때 주소 지정 메모리가 제한됩니다.서버에서 이를 감지하고 다음 메시지를 기록합니다.
=WARNING REPORT==== 19-Dec-2013::11:27:13 ===
Only 2048MB of 12037MB memory usable due to limited address space.
Crashes due to memory exhaustion are possible - see
http://www.rabbitmq.com/memory.html#address-space

따라서 64비트 OS에서 실행할 때 64비트 Erlang VM을 사용하는 것이 좋습니다.

Configuring the Paging Threshold


프록시 (broker) 가 메모리 한도값에 도달하고 게시자를 차단하기 전에, 지시 대기열을 통해 메모리를 디스크로 보내는 것을 시도합니다.지속 메시지와 임시 메시지가 모두 바뀝니다. (지속 메시지는 디스크에 있지만 메모리에서 삭제됩니다.)
기본적으로 에이전트가 메모리 임계값의 50% 위치에 도달하면 발생합니다(기본 메모리 임계값이 0.4인 경우 20% 메모리 사용).이 값을 변경하려면 vm_memory_high_watermark_paging_ratio 설정의 기본값은 0.5로 수정되었습니다.예:
vm_memory_high_watermark_paging_ratio = 0.75
vm_memory_high_watermark.relative = 0.4
 
[{rabbit, [{vm_memory_high_watermark_paging_ratio, 0.75},
 {vm_memory_high_watermark, 0.4}]}]

위의 설정은 메모리의 30%를 사용할 때 페이지를 시작하고 40%를 사용할 때 게시자를 막습니다.
vm_를memory_high_watermark_paging_ratio는 1.0보다 큰 값으로 설정됩니다.이 경우 대기열은 내용 페이지를 디스크에 보내지 않습니다.만약 이것이 메모리 경보를 닫게 된다면, 위에서 말한 바와 같이producer를 막을 것입니다.

좋은 웹페이지 즐겨찾기