在 Karaf 上设置 4096MB 以上的堆内存
Setting a heap memory above 4096MB on Karaf
我正在使用需要大量内存的 java 应用程序,我希望能够将 JVM 的最大可用内存设置为 4096MB 以上的值,例如 8192MB。
我尝试使用以下参数:
wrapper.java.maxmemory
这似乎在 4096MB 阈值下工作正常,但不能超过(它停留在 3.7GB 左右)。
我正在使用 64b JVM。
阻止我超过 4096MB 的代码在哪里?
不幸的是,wrapper.java.maxmemory
的限制在 Karaf (wrapper.c, v3.2.3) 中使用的版本中是硬编码的:
/* Maximum JVM memory */
maxMemory = getIntProperty(properties, "wrapper.java.maxmemory", 0);
if (maxMemory > 0) {
maxMemory = __min(__max(maxMemory, initMemory), 4096); /* initMemory <= n <= 4096 */
if (strings) {
strings[index] = malloc(sizeof(char) * (5 + 4 + 1)); /* Allow up to 4 digits. */
sprintf(strings[index], "-Xmx%dm", maxMemory);
}
index++;
}
你应该使用 wrapper.java.additional.1 = -Xmx8196m
我正在使用需要大量内存的 java 应用程序,我希望能够将 JVM 的最大可用内存设置为 4096MB 以上的值,例如 8192MB。
我尝试使用以下参数:
wrapper.java.maxmemory
这似乎在 4096MB 阈值下工作正常,但不能超过(它停留在 3.7GB 左右)。
我正在使用 64b JVM。
阻止我超过 4096MB 的代码在哪里?
不幸的是,wrapper.java.maxmemory
的限制在 Karaf (wrapper.c, v3.2.3) 中使用的版本中是硬编码的:
/* Maximum JVM memory */
maxMemory = getIntProperty(properties, "wrapper.java.maxmemory", 0);
if (maxMemory > 0) {
maxMemory = __min(__max(maxMemory, initMemory), 4096); /* initMemory <= n <= 4096 */
if (strings) {
strings[index] = malloc(sizeof(char) * (5 + 4 + 1)); /* Allow up to 4 digits. */
sprintf(strings[index], "-Xmx%dm", maxMemory);
}
index++;
}
你应该使用 wrapper.java.additional.1 = -Xmx8196m