本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon MQ for RabbitMQ:高内存警报
当代理的内存使用量(按 CloudWatch 指标RabbitMQMemUsed
标识)超过由标识的内存限制时,适用于 RabbitMQ 的 Amazon MQ 将发出内存不足警报。RabbitMQMemLimit
已发出高内存警报的 RabbitMQ 代理将屏蔽所有正在发布消息的客户端。您的代理可能会进入重启循环,遇到队列同步暂停的情况,或者出现其他问题,使警报的诊断和解决复杂化。
要诊断和解决内存不足警报,请首先遵循 RabbitMQ 的所有最佳实践,然后完成以下步骤。
重要
-
RabbitMQMemLimit
由 Amazon MQ 设置,并根据每种主机实例类型的可用内存进行了专门调整。 -
Amazon MQ 在遇到高内存警报时不会重新启动代理,并且将会在该代理继续发出警报时返回
RebootBroker
API 操作异常。
步骤 1:诊断内存不足警报
有两种方法可以在 Amazon MQ for RabbitMQ 代理上诊断内存过高警报。我们建议您在中同时查看 RabbitMQ 网页控制台和亚马逊 MQ 指标。 CloudWatch
使用 RabbitMQ Web 控制台诊断内存不足警报
RabbitMQ Web 控制台可以生成和显示每个节点的详细内存使用情况信息。您可通过以下操作查找此信息:
-
登录 Amazon Web Services Management Console 并打开您的经纪商的 RabbitMQ 网页控制台。
-
在 RabbitMQ 控制台上的 Overview(概览)页面,从 Nodes(节点)列表中选择一个节点名称。
-
在节点详细信息页面,选择 Memory details(内存详细信息)展开此部分以查看节点的内存使用情况信息。
RabbitMQ 在 Web 控制台中提供的内存使用情况信息可以帮助您确定哪些资源可能消耗过多资源并造成高内存警报。有关通过 RabbitMQ Web 控制台提供的内存使用情况详细信息的更多信息,请参阅 RabbitMQ 服务器文档网站上的内存使用推理
使用 Amazon MQ 指标诊断内存不足警报
默认情况下,Amazon MQ 将会为您的代理启用指标。您可以通过访问 CloudWatch 控制台或使用 CloudWatch API 来查看您的经纪商指标。以下指标在诊断 RabbitMQ 高内存警报时非常有用。
亚马逊 MQ 指标 CloudWatch | 内存使用过高的原因 |
---|---|
MessageCount |
消息在被使用或丢弃之前一直存储在内存中。高消息计数可能指示资源过度使用,并且可能导致高内存警报。 |
QueueCount |
队列存储在内存中,并且大量队列可能会导致高内存警报。 |
ConnectionCount |
客户端连接使用内存,并且过多同时连接可能会导致高内存警报。 |
ChannelCount |
与连接类似,使用每个连接建立的通道也会存储在节点内存中,并且大量通道可能会导致高内存警报。 |
ConsumerCount |
对于连接至代理的每个使用者,一组消息在传输至使用者之前将从存储加载到内存。大量使用者连接可能造成高内存使用,并导致高内存警报。 |
PublishRate |
发布消息将会使用代理的内存。如果消息发布到代理的速率过高并且大幅超过代理将消息传输到使用者的速率,则代理可能会遇到高内存警报。 |
第 2 步:处理并防止内存过高警报
注意
在您采取必要的操作后,RABBITMQ_MEMORY_ALARM 状态可能需要几个小时才能清除。
遵循 RabbitMQ 的所有最佳实践作为一般预防方法。对于您确定的每个特定贡献者,我们建议您采取以下一组操作来解决和防止 RabbitMQ 内存不足警报。
高内存使用率的来源 | 亚马逊 MQ 关于解决问题的建议 | 亚马逊 MQ 防范建议 |
---|---|---|
留言数量 | 使用发布到队列的消息,清除队列中的消息,或者从代理中删除队列。 | 启用延迟队列,并设置或减少队列深度限制。 |
队列数 | 减少队列数。 | 设置或减少队列数量限制。 |
连接数 | 减少连接数。 | 设置或减少连接数限制。 |
通道编号 | 减少频道数量。 | 设置客户端应用程序上的每个连接的最大通道数。 |
使用者数 | 减少连接到代理的使用者数。 | 设置一个小的使用者预提取限制。 |
消息发布率 | 降低发布商向代理发送消息的速率。 | 开启发布者确认。 |
客户端连接尝试率 | 降低客户端尝试连接到代理以便发布或使用消息或者配置代理的频率。 | 使用长期连接来降低连接尝试的数量和频率。 |
代理的内存警报解决后,您可以将主机实例类型升级为具有额外资源的实例。有关如何更新您的代理实例类型的信息,请参阅 Amazon MQ REST API 参考UpdateBrokerInput
中的。
注意
您不能将代理从mq.m5.x
实例类型降级为mq.t3.micro
实例类型。要降级,您必须删除您的经纪商并创建一个新的经纪商。