2

我目前正在开发一个需要大量内存的项目,但我无法让 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

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

我还明确尝试通过包装器传递额外的 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 堆空间的方法?

4

3 回答 3

6

我相信 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 仍然为此指定自己的值。

于 2014-03-13T17:16:57.273 回答
0

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

于 2014-02-03T21:04:26.800 回答
0

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

我通过添加这一行 wrapper.java.additional.4=-XX:CompressedClassSpaceSize=2G 在 wrapper.conf 文件中进行了更改(默认为 1G)

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

一些好用的命令:c:> tasklist | findstr java ...记下 PID... c:> jmap -heap

ps 如果您想在命令行(而不是服务)中单独设置这个值,那么它将是 c:> mule -start -M-XX:CompressedClassSpaceSize=2G

快乐编码!

于 2016-03-04T13:28:19.493 回答