【问题标题】:Limiting Apache Camel memory consumption限制 Apache Camel 内存消耗
【发布时间】:2015-11-30 05:22:26
【问题描述】:

我们使用 apache camel 从目录中读取文件并将内容放入 Glassfish 4.1 服务器内的 JMS 主题中。其他软件部分正在读取此 JMS 主题并处理内容。

我们现在遇到了问题,服务器在可接受的负载下运行了一段时间,但几个小时后内存消耗增加并且服务器开始交换。那时服务器就失控了。

谁能给我一个提示,我必须转向哪些 skrews(JMS ConnectionFactory、ThreadPools 等)?

【问题讨论】:

  • 您使用的是什么 JMS 代理?它是嵌入在您的 Camel 应用程序中还是独立的?
  • 应该是由 glassfish 服务器提供的 OpenJms 运行
  • hmmm...不熟悉 OpenJMS,但在 AMQ 中,每个目的地缓冲消息的内存都有限制,等等...这会限制这一点。
  • 我们将 imq.system.max_size 属性设置为 10m,并将最大连接限制减少到 20 个连接。在那次更改之后,我们对内存没有任何问题。

标签: glassfish jms apache-camel


【解决方案1】:

您的 JMS 代理应该有一种方法来配置最大内存/消息计数以在内存中缓冲给定目标等...ActiveMQ 让您轻松configure this...可能会尝试类似的方法。

另外,如果您正在处理正在解析的大文件(拆分等)...您可以尝试启用流模式,因为这是解决内存使用问题的一般最佳实践...

否则,我会在您的未来看到一个堆转储来分析究竟是什么占用了内存...

【讨论】:

  • 我们有 20kb 的非常小的文件 - 但我们每秒获得 10 个。因此,如果我们的停机时间很短-骆驼将它们全部加载到内存中,而忽略处理速度。但我会尝试流媒体模式。
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2021-03-29
  • 2016-09-26
  • 1970-01-01
  • 2022-10-05
相关资源
最近更新 更多