Glassfish 限制apachecamel内存消耗

Glassfish 限制apachecamel内存消耗,glassfish,jms,apache-camel,Glassfish,Jms,Apache Camel,我们使用ApacheCamel从目录中读取文件,并将内容放入Glassfish 4.1服务器中的JMS主题中。其他软件部件正在读取此JMS主题并处理内容 我们现在遇到的问题是,服务器以可接受的负载运行了一段时间,但几小时后,内存消耗增加,服务器开始交换。此时服务器已失去控制 谁能给我一个我必须打开的skrews(JMS ConnectionFactory、ThreadPools等)的提示吗?您的JMS代理应该有一种方法来配置最大内存/消息计数以缓冲给定目标的内存,等等。ActiveMQ让您很容易

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

我们现在遇到的问题是,服务器以可接受的负载运行了一段时间,但几小时后,内存消耗增加,服务器开始交换。此时服务器已失去控制


谁能给我一个我必须打开的skrews(JMS ConnectionFactory、ThreadPools等)的提示吗?

您的JMS代理应该有一种方法来配置最大内存/消息计数以缓冲给定目标的内存,等等。ActiveMQ让您很容易…可以尝试类似的方法

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


否则,我会在您的将来看到一个堆转储,以分析到底是什么在消耗内存…

您使用的JMS代理是什么?它是嵌入在您的Camel应用程序中还是嵌入在standlone中?它应该是由glassfish serverhmmm提供的OpenJms运行…不熟悉OpenJms,但在AMQ中,每个目的地缓冲消息的内存有限制,等等。这会限制这一点。我们将imq.system.max_size属性设置为10m,并将最大连接限制减少到20个连接。在那次更改之后,我们的内存没有任何问题。我们有20kb的非常小的文件,但我们每秒得到10个。因此,如果我们有一个小的停机时间,camel会将它们全部加载到内存中,而忽略处理速度。但我会尝试流媒体模式。