如果这是重复的,我深表歉意,但我似乎无法在任何地方找到答案。
使用 Apache Karaf 时增加最大 Java 堆大小的最佳方法是什么?
目前,我在 karaf.bat 文件中修改了以下行:
set DEFAULT_JAVA_OPTS=-server -Xmx<NewMaxValue>M
.
我觉得修改bat文件不是最好的解决方案。此外,似乎没有一个配置文件可以放置它。
谢谢
如果这是重复的,我深表歉意,但我似乎无法在任何地方找到答案。
使用 Apache Karaf 时增加最大 Java 堆大小的最佳方法是什么?
目前,我在 karaf.bat 文件中修改了以下行:
set DEFAULT_JAVA_OPTS=-server -Xmx<NewMaxValue>M
.
我觉得修改bat文件不是最好的解决方案。此外,似乎没有一个配置文件可以放置它。
谢谢
(至少)在 karaf 2.2.10 中:
bin/start
正如 Ford Guo 指出的,内存值可以在bin/setenv
文件中配置:
export JAVA_MIN_MEM=256M # Minimum memory for the JVM
export JAVA_MAX_MEM=1024M # Maximum memory for the JVM
export JAVA_PERM_MEM=128M # Minimum perm memory for the JVM
export JAVA_MAX_PERM_MEM=256M # Maximum memory for the JVM
karaf-service
)在这种情况下,任何导出的变量似乎都被忽略了。
最大 java 堆大小可以定义在etc/karaf-wrapper.conf
:
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=1024
更新到 Karaf 2.2.3 会显示一个新的 bat 文件。
if "%JAVA_MIN_MEM%" == "" (
set JAVA_MIN_MEM=128M
)
if "%JAVA_MAX_MEM%" == "" (
set JAVA_MAX_MEM=512M
)
if "%JAVA_PERM_MEM%" == "" (
set JAVA_PERM_MEM=16M
)
if "%JAVA_MAX_PERM_MEM%" == "" (
set JAVA_MAX_PERM_MEM=64M
)
这意味着可以只创建一个系统变量而不是修改 bat 文件。
这就是我在你的情况下会做的。
我看到人们建议使用允许您定义命令行参数的服务启动。
我喜欢使用 webconsole,所以我改变了它,让它为它启动的应用程序读取一个 karaf.vmoptions 文件。这需要修补代码,但事实证明它非常有用。
在 bin 目录下,有一个 setenv(.bat) 文件,你可以在里面设置 max/min mem。
setenv
没有为我加载(使用 karaf 包装器),所以我将它放入包装器配置中:(/opt/apache-servicemix-6.1.3/etc/karaf-wrapper.conf
在我的情况下)
# JVM Parameters
# note that n is the parameter number starting from 1.
wrapper.java.additional.1=-Dkaraf.home=%KARAF_HOME%
wrapper.java.additional.2=-Dkaraf.base=%KARAF_BASE%
wrapper.java.additional.3=-Dkaraf.data=%KARAF_DATA%
wrapper.java.additional.4=-Dkaraf.etc=%KARAF_ETC%
wrapper.java.additional.5=-Dcom.sun.management.jmxremote
wrapper.java.additional.6=-Dkaraf.startLocalConsole=false
wrapper.java.additional.7=-Dkaraf.startRemoteShell=true
wrapper.java.additional.8=-Djava.endorsed.dirs=%JAVA_HOME%/jre/lib/endorsed:%JAVA_HOME%/lib/endorsed:%KARAF_HOME%/lib/endorsed
wrapper.java.additional.9=-Djava.ext.dirs=%JAVA_HOME%/jre/lib/ext:%JAVA_HOME%/lib/ext:%KARAF_HOME%/lib/ext
# added by me
wrapper.java.additional.10=-XX:PermSize=512m
wrapper.java.additional.11=-XX:MaxPermSize=512m
重启前检查:
# get process id of you running instance
jps -lvm
# or
ps aux | grep java
# check memory before and after restarting the service to see wether it changed
jmap -heap $MY_PID 2>/dev/null | sed -ne '/Heap Configuration/,$p';