第 7 章 监控代理以了解问题


AMQ Broker 包括一个名为 Critical 分析器 的内部工具,用于主动监控正在运行的代理,以解决死锁状况等问题。在生产环境中,死锁等问题可能是由 IO 错误、有缺陷的磁盘、内存不足或其他进程导致的 CPU 使用量过量造成的。

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

7.1. 配置 Critical Analyzer

以下流程演示了如何配置 Critical 分析器以监控代理是否存在问题。

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。

    Critical Analyzer 的默认配置如下所示。

    <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 Analyzer 运行的检查的超时时间,以毫秒为单位。如果其中一个检查的操作用时超过这个值,代理就会被视为不稳定。
    critical-analyzer-check-period
    每次操作的连续检查间隔,关键分析器之间的时间间隔为毫秒。
    critical-analyzer-policy
    如果代理失败并被视为不稳定,此参数指定代理是记录消息(LOG)、停止托管代理的虚拟机(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-04-03 11:52:11 +1000

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.