【问题标题】:Setting Java Heap Size under Apache Karaf在 Apache Karaf 下设置 Java 堆大小
【发布时间】:2011-11-13 07:35:11
【问题描述】:

如果这是重复的,我深表歉意,但我似乎无法在任何地方找到答案。

在使用 Apache Karaf 时增加最大 Java 堆大小的最佳方法是什么?

目前,我在 karaf.bat 文件中修改了以下行:

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

我觉得修改bat文件不是最好的解决办法。此外,似乎没有一个配置文件可以放置它。

谢谢

【问题讨论】:

    标签: java heap-memory apache-karaf


    【解决方案1】:

    (至少)在 karaf 2.2.10 中:

    如果通过bin/start 运行 karaf

    正如 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 作为服务运行 (karaf-service)

    在这种情况下,任何导出的变量似乎都被忽略了。

    最大java堆大小可以在etc/karaf-wrapper.conf中定义:

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

    【讨论】:

      【解决方案2】:

      更新到 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 文件。

      【讨论】:

        【解决方案3】:

        在你的情况下我会这样做。

        我看到有人建议使用允许您定义命令行参数的服务启动。

        我喜欢使用 webconsole,所以我对其进行了更改,让它为它启动的应用程序读取 karaf.vmoptions 文件。这需要修补代码,但事实证明它非常有用。

        【讨论】:

          【解决方案4】:

          在bin目录下,有一个setenv(.bat)文件, 你可以在那里设置最大/最小内存。

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 2019-02-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-28
              • 2023-04-10
              • 1970-01-01
              • 2014-01-21
              • 2012-01-31
              相关资源
              最近更新 更多