第 6 章 监控代理的问题


AMQ Broker 包括一个称为 Critical Analyzer 的内部工具,用于主动监控运行代理是否有问题,如死锁条件。在生产环境中,因为 IO 错误、存在缺陷磁盘、内存短缺或 CPU 使用量导致的 CPU 使用量等问题,如死锁条件。

Critical 分析程序定期测量队列交付等关键操作的响应时间(即,将消息添加到代理上的队列中)和日志操作。如果检查的操作响应时间超过可配置的超时值,则代理被视为不稳定。在这种情况下,您可以将 Critical Analyzer 配置为只记录信息或采取措施来保护代理,如关闭代理或停止运行代理的虚拟机(VM)。

6.1. 配置关键分析器

以下流程演示了如何配置 Critical Analyzer 以监控代理是否有问题。

步骤

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。

    Critical 分析器的默认配置如下所示。

    <critical-analyzer>true</critical-analyzer>
    <critical-analyzer-timeout>120000</critical-analyzer-timeout>
    <critical-analyzer-check-period>60000</critical-analyzer-check-period>
    <critical-analyzer-policy>HALT</critical-analyzer-policy>
  2. 指定参数值,如下所述。

    critical-analyzer
    指定是否启用或禁用 Critical 分析工具。默认值为 true,这意味着启用了该工具。
    critical-analyzer-timeout
    Critical 分析运行的检查超时(以毫秒为单位)。如果检查的操作之一的时间超过这个值,则代理被视为不稳定。
    critical-analyzer-check-period
    每次操作通过 Critical 分析器连续检查时间(以毫秒为单位)。
    critical-analyzer-policy
    如果代理失败并被视为不稳定,这个参数指定代理记录一条消息(LOG),停止托管代理(HALT)的虚拟机(VM),或者关闭代理(SHUTDOWN)。

    根据您配置的策略选项,如果关键操作的响应时间超过配置的超时值,您会看到类似如下的输出:

    critical-analyzer-policy=LOG

    [Artemis Critical Analyzer] 18:11:52,145 WARN [org.apache.activemq.artemis.core.server] AMQ224081: The component org.apache.activemq.artemis.tests.integration.critical.CriticalSimpleTest$2@5af97850 is not responsive

    critical-analyzer-policy=HALT

    [Artemis Critical Analyzer] 18:10:00,831 ERROR [org.apache.activemq.artemis.core.server] AMQ224079: The process for the virtual machine will be killed, as component org.apache.activemq.artemis.tests.integration.critical.CriticalSimpleTest$2@5af97850 is not responsive

    critical-analyzer-policy=SHUTDOWN

    [Artemis Critical Analyzer] 18:07:53,475 ERROR [org.apache.activemq.artemis.core.server] AMQ224080: The server process will now be stopped, as component org.apache.activemq.artemis.tests.integration.critical.CriticalSimpleTest$2@5af97850 is not responsive

    您还会在类似如下的代理中看到线程转储:

    [Artemis Critical Analyzer] 18:10:00,836 WARN  [org.apache.activemq.artemis.core.server] AMQ222199: Thread dump: AMQ119001: Generating thread dump
    * =============================================================================== AMQ119002: Thread Thread[Thread-1 (ActiveMQ-scheduled-threads),5,main] name = Thread-1 (ActiveMQ-scheduled-threads) id = 19 group = java.lang.ThreadGroup[name=main,maxpri=10] sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745) =============================================================================== ..... .......... =============================================================================== AMQ119003: End Thread dump *

修订到 2022-03-19 15:53:01 +1000

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.