简体   繁体   English

在Apache Karaf下设置Java堆大小

[英]Setting Java Heap Size under Apache Karaf

I apologize if this is a duplicate, but I can't seem to find this answered anywhere. 如果这是重复的话,我道歉,但我似乎无法在任何地方找到答案。

What is the best way to increase the maximum Java heap size when using Apache Karaf? 使用Apache Karaf时增加最大Java堆大小的最佳方法是什么?

Currently, I modified the following line in the karaf.bat file: 目前,我修改了karaf.bat文件中的以下行:

set DEFAULT_JAVA_OPTS=-server -Xmx<NewMaxValue>M . set DEFAULT_JAVA_OPTS=-server -Xmx<NewMaxValue>M

I feel like modifying the bat file is not the best solution. 我觉得修改bat文件不是最好的解决方案。 Additionally, none of the config files seem to have a place to put this. 此外,没有一个配置文件似乎有地方放这个。

Thanks 谢谢

(At least) in karaf 2.2.10: (至少)在karaf 2.2.10中:

If running karaf through bin/start 如果通过bin/start运行karaf

As Ford Guo pointed out, memory values could be configured in the bin/setenv file: 正如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

If running karaf as a service ( karaf-service ) 如果运行karaf作为服务( karaf-service

In this case any exported variable seems to be ignored. 在这种情况下,任何导出的变量似乎都会被忽略。

The maximum java heap size could be defined in the etc/karaf-wrapper.conf : 最大的Java堆大小可以在etc/karaf-wrapper.conf定义:

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=1024

Updating to Karaf 2.2.3 reveals a new bat file. 更新到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
)

This means one can just create a system variable instead of modifying the bat file. 这意味着可以只创建一个系统变量而不是修改bat文件。

在bin目录中,有一个setenv(.bat)文件,你可以在那里设置max / min mem。

setenv wasnt loaded for me (using the karaf wrapper), so I put it into the wrapper config: ( /opt/apache-servicemix-6.1.3/etc/karaf-wrapper.conf in my case) setenv为我加载(使用karaf包装器),所以我把它放入包装器配置/opt/apache-servicemix-6.1.3/etc/karaf-wrapper.conf在我的情况下/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 

Check prior to the restart: 重启之前检查:

# 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';

That what I would do in your situation. 这就是我在你的情况下会做的事情。

I have seen people suggest using a service start which allows you define the the command line arguments. 我见过人们建议使用服务启动,它允许您定义命令行参数。

I liked using the webconsole so I changed it so it read a karaf.vmoptions file for the applications it starts. 我喜欢使用webconsole所以我更改了它,因此它为它启动的应用程序读取了一个karaf.vmoptions文件。 This requires patching the code, but it turned out to be very useful. 这需要修补代码,但结果证明是非常有用的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM