第 9 章 检测死连接


有时,客户端会意外停止,且没有清理其资源的机会。如果发生了这种情况,它可以使资源处于故障状态,并导致代理耗尽内存或其他系统资源。代理检测到客户端的连接没有在垃圾回收时正确关闭。然后,连接关闭,类似以下的消息将写入日志。日志捕获了客户端会话实例化的确切代码行。这可让您识别错误并进行更正。

[Finalizer] 20:14:43,244 WARNING [org.apache.activemq.artemis.core.client.impl.DelegatingSession]  I'm closing a JMS Conection you left open. Please make sure you close all connections explicitly before let
ting them go out of scope!
[Finalizer] 20:14:43,244 WARNING [org.apache.activemq.artemis.core.client.impl.DelegatingSession]  The session you didn't close was created here:
java.lang.Exception
   at org.apache.activemq.artemis.core.client.impl.DelegatingSession.<init>(DelegatingSession.java:83)
   at org.acme.yourproject.YourClass (YourClass.java:666) 1
1
实例化连接的客户端代码中的行。

9.1. Connection Time-To-Live

因为客户端和服务器之间的网络连接可能会失败,然后返回在线,允许客户端重新连接,AMQ Broker 会等待清理不活跃的服务器端资源。这个等待周期被称为生存时间(TTL)。基于网络的连接的默认 TTL 为 60000 毫秒(1 分钟)。in-VM 连接中的默认 TTL 为 -1, 这意味着代理永远不会在代理端超时连接。

在 Broker 上配置 Time-To-Live

如果您不希望客户端指定自己的连接 TTL,您可以在代理端设置全局值。这可以通过在代理配置中指定 connection-ttl-override 元素来实现。

根据 connection-ttl-check-interval 元素决定,检查 TTL 违反连接的逻辑在代理上定期运行。

流程

  • 通过添加 connection-ttl-override 配置元素并提供一个 time-to-live 的值来编辑 < broker_instance_dir> /etc/broker.xml,如下例所示。

    <configuration>
     <core>
      ...
      <connection-ttl-override>30000</connection-ttl-override> 1
      <connection-ttl-check-interval>1000</connection-ttl-check-interval> 2
      ...
     </core>
    </configuration>
    1
    所有连接的全局 TTL 都设为 30000 毫秒。默认值为 -1, 它允许客户端设置自己的 TTL。
    2
    死连接检查之间的间隔设置为 1000 毫秒。默认情况下,检查会每 2000 毫秒进行一次。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.