代码之家  ›  专栏  ›  技术社区  ›  Brian

是否可以将JVM选项存储在文件中?

  •  1
  • Brian  · 技术社区  · 5 年前

    我在AWS Elastic Beanstalk或本地计算机上运行了一个Tomcat应用程序。

    每当我想开始申请时,我都必须通过许多考试 -Dkey=value 选择它。

    这些选项的值取决于我运行的环境(例如,dev、prod、staging或qa等)。

    是否可以将这些选项集存储在文件中(比如 qa.properties , dev.properties ,或 prod.properties , ...) 这样我就可以通过类似的东西 -property_file=dev.properties 在开发环境中启动java应用程序?

    经过 -property_file=dev.prperties 到JVM比传递更优雅 -Ddev_key1=dev_value1 -Ddev_key2=dev_value2 -Ddev_key3=dev_value3 ... JVM。

    我找不到这样的选择 java -help .

    Usage: java [-options] class [args...]
               (to execute a class)
       or  java [-options] -jar jarfile [args...]
               (to execute a jar file)
    where options include:
        -d32          use a 32-bit data model if available
        -d64          use a 64-bit data model if available
        -server       to select the "server" VM
                      The default VM is server,
                      because you are running on a server-class machine.
    
    
        -cp <class search path of directories and zip/jar files>
        -classpath <class search path of directories and zip/jar files>
                      A : separated list of directories, JAR archives,
                      and ZIP archives to search for class files.
        -D<name>=<value>
                      set a system property
        -verbose:[class|gc|jni]
                      enable verbose output
        -version      print product version and exit
        -version:<value>
                      Warning: this feature is deprecated and will be removed
                      in a future release.
                      require the specified version to run
        -showversion  print product version and continue
        -jre-restrict-search | -no-jre-restrict-search
                      Warning: this feature is deprecated and will be removed
                      in a future release.
                      include/exclude user private JREs in the version search
        -? -help      print this help message
        -X            print help on non-standard options
        -ea[:<packagename>...|:<classname>]
        -enableassertions[:<packagename>...|:<classname>]
                      enable assertions with specified granularity
        -da[:<packagename>...|:<classname>]
        -disableassertions[:<packagename>...|:<classname>]
                      disable assertions with specified granularity
        -esa | -enablesystemassertions
                      enable system assertions
        -dsa | -disablesystemassertions
                      disable system assertions
        -agentlib:<libname>[=<options>]
                      load native agent library <libname>, e.g. -agentlib:hprof
                      see also, -agentlib:jdwp=help and -agentlib:hprof=help
        -agentpath:<pathname>[=<options>]
                      load native agent library by full pathname
        -javaagent:<jarpath>[=<options>]
                      load Java programming language agent, see java.lang.instrument
        -splash:<imagepath>
                      show splash screen with specified image
    See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Alexander Prisadkov    5 年前

    启动之前tomcat执行 $CATALINA_HOME/bin/setenv.sh (或 %CATALINA_BASE%\bin\setenv.bat 窗户)

    你可以写 setenv.sh 类似文件

    export JAVA_OPTS="$JAVA_OPTS\
     -Ddev_key1=dev_value1\
     -Ddev_key2=dev_value2\
     -Ddev_key3=dev_value3"
    
        2
  •  1
  •   Shiva kumar    5 年前

    是的,当然。 正如Alexander所提到的,您可以在tomcat bin文件夹中添加一个setenv.sh文件。 以下是我们正在使用的一些论点。

    # discourage address map swapping by setting Xms and Xmx to the same value
    # http://confluence.atlassian.com/display/DOC/Garbage+Collector+Performance+Issues
    export CATALINA_OPTS="$CATALINA_OPTS -Xms10000m"
    export CATALINA_OPTS="$CATALINA_OPTS -Xmx10000m"
    export CATALINA_OPTS="$CATALINA_OPTS -XX:NewRatio=1"
    
    
    # Increase maximum perm size for web base applications to 4x the default amount
    # http://wiki.apache.org/tomcat/FAQ/Memoryhttp://wiki.apache.org/tomcat/FAQ/Memory
    export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"
    
    # Reset the default stack size for threads to a lower value (by 1/10th original)
    # By default this can be anywhere between 512k -> 1024k depending on x32 or x64
    # bit Java version.
    # http://www.springsource.com/files/uploads/tomcat/tomcatx-large-scale-deployments.pdf
    # http://www.oracle.com/technetwork/java/hotspotfaq-138619.html
    export CATALINA_OPTS="$CATALINA_OPTS -Xss228k"
    
    # Oracle Java as default, uses the serial garbage collector on the
    # Full Tenured heap. The Young space is collected in parallel, but the
    # Tenured is not. This means that at a time of load if a full collection
    # event occurs, since the event is a 'stop-the-world' serial event then
    # all application threads other than the garbage collector thread are
    # taken off the CPU. This can have severe consequences if requests continue
    # to accrue during these 'outage' periods. (specifically webservices, webapps)
    # [Also enables adaptive sizing automatically]
    export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseParallelGC"
    
    # This is interpreted as a hint to the garbage collector that pause times
    # of <nnn> milliseconds or less are desired. The garbage collector will
    # adjust the  Java heap size and other garbage collection related parameters
    # in an attempt to keep garbage collection pauses shorter than <nnn> milliseconds.
    # http://java.sun.com/docs/hotspot/gc5.0/ergo5.html
    export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxGCPauseMillis=300"
    
    # A hint to the virtual machine that it.s desirable that not more than:
    # 1 / (1 + GCTimeRation) of the application execution time be spent in
    # the garbage collector.
    # http://themindstorms.wordpress.com/2009/01/21/advanced-jvm-tuning-for-low-pause/
    export CATALINA_OPTS="$CATALINA_OPTS -XX:GCTimeRatio=9"
    
    # The hotspot server JVM has specific code-path optimizations
    # which yield an approximate 10% gain over the client version.
    export CATALINA_OPTS="$CATALINA_OPTS -server"
    
    # Disable remote (distributed) garbage collection by Java clients
    # and remove ability for applications to call explicit GC collection
    #Changed the below line - Garbage 
    #export CATALINA_OPTS="$CATALINA_OPTS -XX:+DisableExplicitGC"
    export CATALINA_OPTS="$CATALINA_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC  -XX:+PrintGCApplicationStoppedTime -Xloggc:logs/gc.log"