

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon MQ for RabbitMQ：高記憶體警示
<a name="troubleshooting-action-required-codes-rabbitmq-memory-alarm"></a>

當 CloudWatch 指標 識別的代理程式記憶體使用量`RabbitMQMemUsed`超過 識別的記憶體限制時，Amazon MQ for RabbitMQ 會發出高記憶體警示`RabbitMQMemLimit`。

引發高記憶體警示的 RabbitMQ 代理程式會封鎖所有發佈訊息的用戶端。您的代理程式可能會進入[重新啟動迴圈](troubleshooting-rabbitmq.md#single-instance-broker-restart-loop)、遇到[暫停的佇列同步](troubleshooting-rabbitmq.md#addressing-paused-queue-sync)，或發生使警示診斷和解決更為複雜的其他問題。

若要診斷和解決高記憶體警示，請先遵循 RabbitMQ 的所有[最佳實務](best-practices-rabbitmq.md)，然後完成下列步驟。

**重要**  
`RabbitMQMemLimit` 由 Amazon MQ 設定，並特別考量每個主機執行個體類型可用的記憶體。
Amazon MQ 不會重新啟動遇到高記憶體警示的代理程式，並且會傳回 [https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id-reboot.html](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id-reboot.html) API 操作的例外狀況 (只要代理程式繼續發出警示)。

## 步驟 1：診斷高記憶體警示
<a name="diagnosing-high-memory-alarm"></a>

 診斷 Amazon MQ for RabbitMQ 代理程式的高記憶體警示有兩種方式。建議您在 CloudWatch 中檢查 RabbitMQ Web 主控台和 Amazon MQ 指標。

### 使用 RabbitMQ Web 主控台診斷高記憶體警示
<a name="diagnose-using-console"></a>

RabbitMQ Web 主控台可以產生並顯示每個節點的詳細記憶體用量資訊。您可以透過以下操作找到此資訊：

1. 登入 AWS 管理主控台 並開啟代理程式的 RabbitMQ Web 主控台。

1.  在 RabbitMQ 主控台上，在 **Overview** (概觀) 頁面上，從 **Nodes** (節點) 清單中選擇節點名稱。

1.  在節點詳細資訊頁面上，選擇 **Memory details** (記憶體詳細資訊) 展開區段以檢視節點的記憶體用量資訊。

RabbitMQ 在 Web 主控台中提供的記憶體用量資訊，可協助您確定哪些資源可能會取用過多記憶體並導致高記憶體警示。如需可透過 RabbitMQ Web 主控台取得之記憶體用量詳細資訊的詳細資訊，請參閱 RabbitMQ 伺服器文件網站上的[記憶體使用原因](https://www.rabbitmq.com/memory-use.html)。

### 使用 Amazon MQ 指標診斷高記憶體警示
<a name="diagnose-using-metrics"></a>

預設情況下，Amazon MQ 為您的代理程式啟用指標。您可以透過存取 CloudWatch 主控台，或使用 CloudWatch API，[檢視您的代理程式指標](amazon-mq-accessing-metrics.md)。以下指標在診斷 RabbitMQ 高記憶體警示時非常實用。


| Amazon MQ CloudWatch 指標 | 記憶體使用較高的原因 | 
| --- | --- | 
| MessageCount | 訊息一直存放在記憶體中，直到將其取用或捨棄。較高的訊息計數可能表示資源過度使用，並可能導致高記憶體警示。 | 
| QueueCount | 佇列存放在記憶體中，並且大量佇列可能會導致高記憶體警示。 | 
| ConnectionCount | 用戶端連線使用記憶體，並且過多的同時連線可能會導致高記憶體警示。 | 
| ChannelCount | 與連線類似，使用每個連線建立的通道也存放在節點記憶體中，並且大量的通道可能導致高記憶體警示。 | 
| ConsumerCount | 對於連線至代理程式的每個取用者，在傳遞給取用者之前，將一組數量的訊息從儲存器載入至記憶體中。大量取用者連線可能會導致高記憶體用量，並導致高記憶體警示。 | 
| PublishRate | 發佈訊息會使用代理程式的記憶體。如果向代理程式發佈訊息的速率太高，並且顯著超過了代理程式向取用者傳遞訊息的速率，則代理程式可能會發出高記憶體警示。 | 

## 步驟 2：解決和防止高記憶體警示
<a name="address-prevent-high-memory-alarm"></a>

**注意**  
採取所需的動作之後，RABBITMQ\$1MEMORY\$1ALARM 狀態最多可能需要數小時才會解除。

 遵循 RabbitMQ 的所有[最佳實務](best-practices-rabbitmq.md)作為一般預防方法。對於您識別的每個特定貢獻者，我們建議採取以下一組動作來解決和防止 RabbitMQ 高記憶體警示。


| 高記憶體使用的來源 | 用於定址的 Amazon MQ 建議 | 預防 的 Amazon MQ 建議 | 
| --- | --- | --- | 
| 訊息數量 |  使用發佈至佇列的訊息、從佇列清除訊息，或從代理程式刪除佇列。 |  啟用延遲佇列，並設定或減少[佇列深度限制](rabbitmq-defaults-applying-policies.md)。 | 
| 佇列數量 | 減少佇列數量。 | 設定或減少[佇列計數限制](rabbitmq-resource-limits-configuration.md)。 | 
| 連線數量 | [減少連線數量](reducing-connections-and-channels.md)。 | 設定或減少[連線計數限制](rabbitmq-resource-limits-configuration.md)。 | 
| 頻道數量 | [減少頻道數量](reducing-connections-and-channels.md)。 | 在用戶端應用程式上設定每個連線的最大通道數量。 | 
| 取用者數量 | 減少連線至代理程式的取用者數量。 | 設定小型取用者[預擷取限制](rabbitmq-resource-limits-configuration.md)。 | 
| 訊息發佈率 | 降低發佈者傳送訊息至代理程式的速率。 | 開啟[發佈者確認](best-practices-message-reliability.md#configure-confirmation-acknowledgement)。 | 
| 用戶端連線嘗試率 | 降低用戶端嘗試連線至代理程式以發佈或取用訊息或設定代理程式的頻率。 | 使用壽命較長的連線可減少連線嘗試次數和頻率。 | 

 代理程式的記憶體警示解決後，您可以將主機執行個體類型升級至具有其他資源的執行個體。如需如何更新代理程式執行個體類型的資訊，請參閱《*Amazon MQ REST API 參考*[https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-model-updatebrokerinput](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-model-updatebrokerinput)》中的 。

**注意**  
您無法將代理程式從`mq.m5.x`執行個體類型降級為`mq.t3.micro`執行個體類型。若要降級，您必須刪除代理程式並建立新的代理程式。