无法让Mule 3.4.0使用超过4GB的内存

时间:2014-02-03 19:51:12

标签: java memory-management mule java-service-wrapper

我目前正在开发一个需要大量内存的项目,我无法让Mule 3.4.0使用超过4GB的RAM(在RHEL 6.2上运行)。我使用的是Java HotSpot 64位服务器JVM 1.7.0_45-b18和社区版Mule。

我一直在编辑wrapper.conf文件,我尝试了很多设置都无济于事。

我看到Mule JIRA中列出了一个错误:https://www.mulesoft.org/jira/browse/MULE-7018,它针对3.4.0关闭,但是不完整。

我最近的尝试是明确尝试强制它立即占用8gb的堆空间,以下是最新的尝试:

# Initial Java Heap Size (in MB)
wrapper.java.initmemory=8192

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=8192

我已经尝试将initmemorymaxmemory参数设置为零,根据有关包装器的旧帖子:http://java-service-wrapper.996253.n3.nabble.com/4096MB-heap-limit-td1483.html - 但是,这会导致mule无法正常启动。< / p>

我还明确尝试通过包装器传递其他JVM参数:

wrapper.java.additional.6=-Xmx8192
wrapper.java.additional.7=-Xms8192

执行此操作时,我可以看到两个内存设置都被发送到JVM(即-Xmx8192 -Xms8192首先在进程行上发送-Xms4096m -Xmx4096m)。但是,我的top命令产生的JVM进程占用的内存不超过4.2gb。我意识到顶级RES列不是确定JVM内存使用率的100%确定方式,但我的印象是,如果我试图分配8gb开箱即用,它肯定应该超过4GB。这台机器有60GB的物理内存。

有没有人发现为Mule 3.4.0获得超过4GB的堆空间?

3 个答案:

答案 0 :(得分:5)

我相信Anton的答案会很好,但是我无法清楚地知道Java Service Wrapper的许可证何时改为GPL并且不想冒任何风险这个变化对我的用例产生负面影响。

我找到了一种使用Mule 3.4.0中包含的当前版本的Java Service Wrapper来实现这项工作的方法,因此JSW对GPL的更改没有任何额外的许可证含义。

如果修改wrapper.conf以将最小和最大内存设置显式设置为0:

wrapper.java.initmemory=0
wrapper.java.maxmemory=0

然后你可以通过附加属性直接传递内存参数,也可以在wrapper.conf中传递:

wrapper.java.additional.6=-Xmx8192m
wrapper.java.additional.7=-Xms4096m

将initmemory和maxmemory显式设置为零,包装器将不再首先将自己的内存参数传递给JVM,因此允许您指定自己的内存参数。请注意,这不适用于maxPermGen - 由于某种原因,JSW仍为其指定了自己的值。

答案 1 :(得分:0)

正如Jira票证评论所说,您可以下载更高版本的Tanuki包装器(并替换lib / boot下Mule独立包含的包装文件)以克服此限制。因此,download Tanuki 3.3.0,在Mule独立的lib / boot和子文件夹下删除名称中包含“wrapper”的所有文件,并将它们替换为Tanuki包装器中lib和bin文件夹中包含的文件。 Tanuki可执行文件(bin / wrapper)位于lib / boot / exec下,以及lib / boot下的.so和.jar文件。骡子应该正常启动,但不幸的是我无法测试4G +设置,因为我现在没有合适的机器。

答案 2 :(得分:0)

尝试为运行为Windows服务的Mule实例增加CompressedClassSpaceSize无济于事。在我最终弄清楚原因之前,这个价值不会被提升。

我通过添加此行在wrapper.conf文件中进行了更改 wrapper.java.additional.4 = -XX:CompressedClassSpaceSize = 2G(顺便说一下1G是默认的)

但未能检查wrapper-additional.conf文件,其中已经使用了.4键,覆盖了我的设置。我移动了我的更改并将键值修改为下一个连续的数字并且瞧: wrapper.java.additional.6 = -XX:CompressedClassSpaceSize = 2G

使用一些好的命令: C:GT;任务列表| findstr java ...记下PID ... C:GT; jmap -heap

P.S。如果你想在cmd-line(而不是Service)中设置这个值在Standlone中启动Mule那么它将是 C:GT; mule -start -M-XX:CompressedClassSpaceSize = 2G

快乐的编码!