首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解ActiveMQ Artemis AMQ222061 & AMQ222107警告

理解ActiveMQ Artemis AMQ222061 & AMQ222107警告
EN

Stack Overflow用户
提问于 2021-06-23 08:42:09
回答 1查看 1.7K关注 0票数 1

目前,我收到的应用程序1-2 req/秒的流量非常低,这些流量被发送到JMS队列。然而,在artemis.log中,我看到了以下WARN消息。

代码语言:javascript
复制
2021-06-23 10:51:49,433 WARN  [org.apache.activemq.artemis.core.server] AMQ222061: Client connection failed, clearing up resources for session d798a4d3-d3f7-11eb-86d7-005056b536f0
2021-06-23 10:51:49,434 WARN  [org.apache.activemq.artemis.core.server] AMQ222107: Cleared up resources for session d798a4d3-d3f7-11eb-86d7-005056b536f0
2021-06-23 10:51:49,434 WARN  [org.apache.activemq.artemis.core.server] AMQ222061: Client connection failed, clearing up resources for session d798cbe4-d3f7-11eb-86d7-005056b536f0
2021-06-23 10:51:49,435 WARN  [org.apache.activemq.artemis.core.server] AMQ222107: Cleared up resources for session d798cbe4-d3f7-11eb-86d7-005056b536f0

Artemis日志由NFS支持,所有消息都被持久化。我使用Spring的JmsTemplate和一个JmsPoolConnectionFactory

代码语言:javascript
复制
@Bean
public ConnectionFactory jmsConnectionFactoryOnline() {
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl,username,password);
    connectionFactory.setCallTimeout(3000);
    return connectionFactory;
}
代码语言:javascript
复制
@Bean
@Primary
public JmsPoolConnectionFactory pooledConnectionFactory() {
    JmsPoolConnectionFactory poolingFactory = new JmsPoolConnectionFactory();
    poolingFactory.setConnectionFactory(jmsConnectionFactoryOnline());
    poolingFactory.setMaxConnections(8);
    poolingFactory.setMaxSessionsPerConnection(20);
    poolingFactory.setConnectionIdleTimeout(0);
    return poolingFactory;
}

知道为什么会有这么多断线(每15分钟重复一次),以及如何调试?

在客户端级别,我会收到以下警告,但由于代理已经启动并接受其他消息,所以3秒似乎很长时间:

代码语言:javascript
复制
23-06-2021 09:33:15 [Thread-24 (ActiveMQ-client-global-threads)] [WARN ] org.apache.activemq.artemis.core.client - AMQ212037: Connection failure to XXXXXX:61616 has been detected: AMQ219014: Timed out after waiting 3,000 ms for response when sending packet 71 [code=CONNECTION_TIMEDOUT]

编辑

我每隔3秒就会抛出一个线程。检查这里以获得相关信息。

监视推到队列延迟,我可以清楚地看到,对于1req/秒,我有一个峰值延迟,而对于20个req/秒,推到队列延迟似乎是正常的,如下图所示。

推到队列延迟

另外,从tcpdump中,我可以看到客户机和代理之间存在暂停。他们之间似乎没有交通往来。因此,一旦callTimeout周期过了,客户端就会关闭连接。

tcpdump

EN

回答 1

Stack Overflow用户

发布于 2021-06-23 15:46:49

不可能知道为什么您所提供的信息会有如此多的中断,但是下面是一些调试的想法:

  • 从代理获取线程转储,以查看在断开连接期间是否很忙。
  • 打开GC日志,以确保长时间暂停不会导致代理没有响应。
  • org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl打开跟踪日志记录。有关如何配置的详细信息,请参阅ActiveMQ Artemis 文档。这将让您看到来自客户端的传入PING数据包,或者没有它们。当代理在配置的连接TTL中没有接收到pings时,它将关闭客户端的连接。
  • 监视网络资源,以解决诸如延迟、丢包、断开等问题。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68096440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档