`
tinyhema
  • 浏览: 150513 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

漫谈jvm参数

    博客分类:
  • java
 
阅读更多
背景

jvm参数是所有jvm-based应用的核心配置,对应用的性能有极大影响,配置不当的情况下会甚至会导致应用不能提供服务。

这里简单的讲一下jvm配置与它生效的场景,更专业的jvm各参数含义及推荐配置方案,暂不涉及。

场景

我们的应用代码比较复杂,在debug的时候经常OOM,导致应用启动失败,原因都是jvm参数配置不合理。

可能的原因有以下3种。

1.  堆内存过小
-Xmx2048m  # 设置最大jvm参数为2024m,也可以写作 -Xmx2g


2. 堆外内存过小
-XX:MaxPermSize=512m # 设置最大堆外内存,主要是class与元数据,也是gc不能回收的区域


3. 栈溢出
-Xss=1m  # 在方法嵌套比较深的情况下,可能会出现



举例
从我个人遇到的场景出发,列举一下各场景下配置与生效范围。
  • eclipse所在的vm
  • eclipse安装目录下的eclipse.ini文件, -vmargs下面的行就是配置jvm参数的地方,在开发代码比较复杂的情况下,可以适当调大一些jvm参数,提升eclipse运行效率。

  • eclipse里Run As Application
  • 配置方法:
    eclipse -- preferences -- java -- Installed JREs -- 选择jre -- 点击Edit,具体操作路径见下图。

    配置举例:
    -Xms512m -Xmx1336m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m
    


  • eclipse里Run As JUnit Test
  • 同上

  • 命令行执行java命令
  • 设置环境变量$JAVA_OPTS,一部分奇葩的应用会使用$JAVA_OPTIONS应用,如jetty。。。,所以我现在是配置这2个环境变量
    配置举例:
    # ~/.bashrc文件
    export JAVA_OPTS="-Xms256m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"
    export JAVA_OPTIONS=$JAVA_OPTS
    export MAVEN_OPTS=$JAVA_OPTS
    


  • 命令行执行maven命令
  • 设置环境变量$MAVEN_OPTS

  • maven test
  • 如果在配置maven-surefire-plugin的时候指定了jvm参数,那么所有环境变量都不会生效,因此执行mvn test的时候,需要额外关注pom.xml中对surefire的配置。

    例如,这个插件配置就指定了jvm参数,那么这个工程在执行mvn test时,就不受$MAVEN_OPTS环境变量的影响。如果要修改jvm参数,也只能在pom.xml文件中修改。
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <argLine>-XX:MaxPermSize=512m -Xmx2500m</argLine>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    • 大小: 289.2 KB
    分享到:
    评论

    相关推荐

    Global site tag (gtag.js) - Google Analytics