Como soluciono problemas de erros “Persistent store is Full” (O armazenamento persistente está cheio) no Amazon MQ para ActiveMQ?

Data da última atualização: 19/04/2022

Não consigo enviar mensagens para meu agente do Amazon MQ para ActiveMQ. Quando eu analiso os logs do agente no Amazon CloudWatch, vejo um erro “Persistent store is Full” (O armazenamento persistente está cheio). O que está causando o erro e como soluciono o problema?

Descrição breve

O Amazon MQ para ActiveMQ retorna um erro do tipo Persistent store is Full (O armazenamento persistente está cheio) no CloudWatch quando um agente atinge seu limite de armazenamento. Quando um agente do Amazon MQ para ActiveMQ atinge seu limite de armazenamento, ele não pode receber mensagens.

Para resolver os erros Persistent store is Full (O armazenamento persistente está cheio), primeiro confirme a causa do erro revisando as seguintes métricas do CloudWatch no seu agente:

  • Porcentagem de uso do armazenamento
  • Arquivos do diário para recuperação completa
  • Arquivos do diário para recuperação rápida

Em seguida, com base nas métricas do agente, reduza a quantidade de dados salvos no armazenamento persistente do agente, conforme necessário.

Para ajudar a evitar que o erro ocorra novamente, consulte a seção Práticas recomendadas para evitar erros avisando que o armazenamento persistente está cheio neste artigo. Para obter mais informações, consulte Armazenamento de mensagens no AMQ e Controle de fluxo do produtor) na documentação do Apache ActiveMQ.

Exemplo de mensagem de erro “Persistent store is Full” (O armazenamento persistente está cheio) do CloudWatch para um agente do Amazon MQ no ActiveMQ

INFO | Usage(default:store:queue://broker.name:store) percentUsage=99%, usage=537210471, limit=536870912, percentUsageMinDelta=1%;Parent:Usage(default:store) percentUsage=100%, usage=537210471, limit=536870912,percentUsageMinDelta=1%: Persistent store is Full, 100% of 536870912. Stopping producer (ID:xxxx) to prevent flooding queue://broker.name. See http://activemq.apache.org/producer-flow-control.html for more info (blocking for: 155s)

Resolução

Confirme a causa do erro

1.    Abra o console do CloudWatch.

Importante: faça login na mesma região da AWS em que seu agente estiver.

2.    No painel de navegação esquerdo, escolha Metrics (Métricas). Em seguida, escolha All metrics (Todas as métricas). A página Metrics (Métricas) do CloudWatch é aberta.

3.    Na página Metrics (Métricas), escolha Amazon MQ. Em seguida, escolha Broker Metrics (Métricas do agente).

4.    Na caixa de pesquisa, insira o nome do seu agente. Em seguida, pressione Enter no teclado. Todas as métricas do CloudWatch para o agente que você inseriu na caixa de pesquisa serão exibidas.

5.    Revise o valor da métrica Store Percentage Usage (Porcentagem de uso do armazenamento). Se a métrica de Store Percentage Usage (Porcentagem de uso do armazenamento) do seu agente atingir 100, o agente deixará de receber mensagens e retornará um erro Persistent store is Full (Armazenamento persistente está cheio).

6.    Se a métrica Store Percentage Usage (Porcentagem de uso do armazenamento) do agente for 100 (ou perto de 100), analise os valores das métricas a seguir para determinar a causa:

  • Journal Files for Full Recovery (Arquivos do diário para recuperação completa) indica o número de arquivos do diário que são repetidos após um desligamento limpo. Um aumento nessa métrica indica que os consumidores do seu agente estão ficando lentos ou que há muitas mensagens pendentes no armazenamento persistente.
  • Arquivos do diário para recuperação rápida— indica o número de arquivos do diário que são repetidos após um desligamento comprometido. Um aumento nessa métrica indica que há muitas mensagens pendentes no armazenamento persistente.

Observação: um arquivo de log do diário ActiveMQ KahaDB (arquivo de dados) pode permanecer no armazenamento persistente por qualquer um dos seguintes motivos:

  • O arquivo de dados inclui uma mensagem pendente para uma assinatura ou destino de tópico durável.
  • O arquivo de dados inclui uma confirmação individual (ACK) para uma mensagem que está em um arquivo de dados em uso.
  • O arquivo de dados faz referência a uma transação pendente.
  • O arquivo de dados é um arquivo do diário e há uma ação de gravação pendente nele.

Para obter mais informações, consulte Por que os arquivos de log do KahaDB permanecem após a limpeza na documentação do ActiveMQ.

Para reduzir a quantidade de dados salvos em um Amazon MQ para armazenamento persistente do agente ActiveMQ

Consumir ou excluir as mensagens pendentes que estão nas filas e tópicos duráveis do agente

Para obter instruções, consulte Como limpar uma fila na documentação do Apache ActiveMQ.

Observação: o Amazon MQ para ActiveMQ não oferece suporte a Java Management Extensions (JMX) atualmente. Você deve usar o Console da Web do ActiveMQ para limpar as filas e os tópicos duráveis do agente.

Consumir ou excluir mensagens expiradas que estão na fila de dead-letter queue (DLQ) do agente

Para obter instruções, consulte a seção Descartar automaticamente mensagens expiradas da Entrega de mensagens e Manipulação de DLQ na documentação do Apache ActiveMQ.

Observação: para consumir mensagens na DLQ do seu agente, primeiro configure a DLQ como uma fila regular. Em seguida, configure seus consumidores para pesquisar o DLQ diretamente.

Práticas recomendadas para evitar erros de armazenamento persistente cheio

Verifique se você escolheu o tipo de instância do agente correto para seu caso de uso

Para obter mais informações, consulte Selecionar o tipo de instância de agente correto para obter a melhor taxa de transferência no Guia do desenvolvedor do Amazon MQ.

Observação: dependendo do seu caso de uso, a adição de consumidores ao agente às vezes pode ajudar na taxa de transferência de mensagens do agente.

Aumente o número e a velocidade dos consumidores que estiver usando

Quando você usa o ActiveMQ no modo persistente, a gravação no armazenamento geralmente ocorre quando há poucos consumidores ou quando os consumidores estão lentos. Aumentar o número e a velocidade dos consumidores que você está usando pode ajudar a reduzir a quantidade de dados que seu agente grava no armazenamento persistente.

Defina um alarme do CloudWatch com base na métrica “Porcentagem de uso do armazenamento” do seu agente

Se a métrica de Porcentagem de uso do armazenamento do seu agente atingir 100 (ou perto de 100), o agente deixará de receber mensagens. Para que o CloudWatch o alerte quando essa métrica atingir um limite específico, você pode definir um alarme no CloudWatch. Em seguida, você pode executar as ações preventivas descritas neste artigo antes que o erro ocorra.

Para obter instruções, consulte Criar um alarme do CloudWatch com base em um limite estático no guia do usuário do CloudWatch.