我目前正在开发一个需要大量内存的项目,我无法让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
我已经尝试将initmemory
和maxmemory
参数设置为零,根据有关包装器的旧帖子: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的堆空间?
答案 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
快乐的编码!