我目前正在开发一个需要大量内存的项目,我不能让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
paremeter设置为零,根据这篇关于包装器的老帖子:http://java-service-wrapper.996253.n3.nabble.com/4096MB-heap-limit-td1483.html - 但是,这会导致骡子无法正常启动.
我还明确尝试通过包装器传递其他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的堆空间的方法?
我相信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仍为其指定了自己的值.