- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
配置
我在 Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic x86_64) 上设置了一个独立的 HornetQ (2.4.7-Final) 集群。该实例有 16GB RAM 和 2 个内核,我已将 -Xms5G -Xmx10G 分配给 JVM。
HornetQ配置中的地址设置如下:
<address-settings>
<address-setting match="jms.queue.pollingQueue">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>86400000</redelivery-delay>
<max-delivery-attempts>10</max-delivery-attempts>
<max-size-bytes>1048576000</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
<address-setting match="jms.queue.offerQueue">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>3600000</redelivery-delay>
<max-delivery-attempts>25</max-delivery-attempts>
<max-size-bytes>1048576000</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
<address-setting match="jms.queue.smsQueue">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>3600000</redelivery-delay>
<max-delivery-attempts>25</max-delivery-attempts>
<max-size-bytes>1048576000</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
<!--default for catch all-->
<!-- delay redelivery of messages for 1hr -->
<address-setting match="#">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>3600000</redelivery-delay>
<max-delivery-attempts>25</max-delivery-attempts>
<max-size-bytes>1048576000</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
</address-settings>
还有10个其他队列绑定(bind)到通配符指定的默认地址。
问题
在一段时间内,Direct ByteBuffer 内存的大小逐渐增加,甚至占据交换空间,最终抛出 OutOfMemoryError(“直接缓冲内存”)。
我尝试了很多 JVM 和 JMS 调优,但都无济于事。出于同样的原因,甚至向 JVM 指定 -XX:MaxDirectMemorySize=4G 也会导致早期 OOME。似乎未读取 ByteBuffer 或 GC 未声明未引用的内存。
有没有人遇到过同样的问题?
欢迎提出任何建议,并提前致谢。
最佳答案
我对 hornetq 的内部结构一无所知,所以这个答案只涵盖一般的 DBB:
这是一个普通的泄漏,DBB 对象仍然可以访问,因此没有被释放。这可能是由应用程序中的错误或不正确的使用引起的。
这里通常的方法是进行堆转储并确定是什么让对象保持 Activity 状态。
缓冲区变得不可访问,但垃圾收集器很少执行旧代收集,以至于需要很长时间才能真正收集它们并释放 native 内存。如果服务器以 -XX:+DisableExplicitGC
运行,那么在达到 MaxDirectMemorySize
限制时也会抑制最后一次 Full GC 尝试。
调整 GC 以更频繁地运行以确保及时释放 DBB 可以解决这种情况。
关于java - 为什么 Direct ByteBuffer 在 HornetQ 服务器上不断增加导致 OOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977864/
有没有办法在同一个虚拟机中启动多个 HornetQ 嵌入式代理?例如,在同一进程中运行且完全不相关的两个独立应用程序。 如果我尝试注册第二个 EmbeddedJms 实例,而一个实例已经在运行,这就是
我正在尝试用我自己的测试项目重新创建 HornetQ 示例。但是我遇到了类加载器问题。显然,我缺少文档中未指定的一些依赖项。 文档让我添加 hornetq-core-client.jar netty.
如何使用 HornetQ 以编程方式创建 JMS 主题和队列? 最佳答案 http://docs.jboss.org/hornetq/2.2.14.Final/user-manual/en/html/
我构建了一个 Spring JMS 解决方案,该解决方案是针对 JBoss 7.1.1 和外部 HornetQ 实现 2.2.1.4 构建的。此连接并成功运行。 但是我现在使用 EAP6,并尝试连接到
(在 11.11.11 编辑,底部编辑) 我有两个运行 HornetQ(2.2.5 AS7 版)服务器的 JBoss AS 6.1 服务器。 让我们称另一个为 CLIENT,另一个为 MASTER。
我正在尝试运行一本书(HornetQ Messaging Developers Guide)中的一个简单的 HornetQ 示例,但收到错误消息。我没有使用maven,因为我想坚持使用书中给出的示例。
我使用 SBT 0.13.1 . 当我添加 HornetQ 作为我的依赖项时: libraryDependencies += "org.hornetq" % "hornetq-server" % "2
我发现在我们的实际环境中经常发生以下异常: 2013-01-08 00:09:45,886 ERROR [org.jboss.aspects.tx.TxPolicy] (Thread-70534 (H
我在带有 hornetQ 的 ubuntu 上使用 jboss AS 6 Final 我使用管理面板在名为 Message Buffer Queue 的服务器上创建了一个新队列。 我收到以下错误: U
我正在使用 HornetQ 发送电子邮件。 文件附件使用对象存储系统进行带外传输(不作为消息的一部分)。这会增加一些开销,我想通过将小文件直接放入消息属性来避免这些开销。 我知道我可以发送巨大的消息体
我已阅读 HornetQ 常见问题解答,但找不到任何相关内容。我正在使用 HornetQ 2.2.5,它包含一个错误(是的,只有一个;)。根据这篇文章https://community.jboss.o
我已经配置了hornetq来处理大消息,但是如果客户端没有启动,大消息目录就会变得太大,消耗整个磁盘空间 请帮助弄清楚如何在邮件发送后删除或清理大型邮件文件夹? 也未在 jboss/server/de
我在独立模式下使用默认配置运行 hornetQ,我可以从本地系统连接到它,如果我想从另一个系统连接,必须更改哪些配置才能实现?! 最佳答案 您首先需要定义另一个系统的含义,您是指另一个 HornetQ
对于当前的项目,我尝试使用 JBoss 7.1 和 HornetQ (JMS) 设置以下场景,我认为这是一个相当常见的用例:有三个应用程序服务器。多个MDB应各自处理一个冗长计算过程的分解片段,任务应
我正在尝试独立运行 HornetQ 服务器。但我不知道该怎么做,我下载了 hornetq-2.0.0.GA 并使用 build.sh 启动服务器,但我希望通过 java 代码启动 HornetQ 服务
我想以某种方式延迟整个消息组的消息。 问题是,属于每个消息组的所有消息都必须按照它们发布的顺序进行处理。如果其中一条消息无法被使用 - 我们希望延迟它并延迟同一消息组中的其余消息。我不想阻止消费者 -
我使用 HornetQ 作为队列提供程序,因为它具有持久性功能。但是,在我重新启动应用程序后,队列中的所有消息都丢失了。可能是配置问题? 代码如下: // Step 1. Create the Con
我使用 EJB 来实现命令模式。 EJB 是执行业务逻辑的命令服务。我知道在 J2EE 中 EJB 管理事务以及事务超时。
我正在开发一个使用 HornetQ 作为消息传递服务器的应用程序。在 HornetQ 启动时,我总是收到与 HornetQ live lock 相关的错误。 我针对这个特定问题进行了研究,但无法得出相
我正在尝试将 ActiveMQ-CPP 与 HornetQ 一起使用。我正在使用 ActiveMQ-CPP 捆绑示例,但我很难使用它。生产者工作得很好,但消费者给我以下信息: * BEGIN SERV
我是一名优秀的程序员,十分优秀!