漫谈jvm参数

[size=x-large]背景[/size]

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

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

[size=x-large]场景[/size]

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

可能的原因有以下3种。

[size=large]1. 堆内存过小[/size]

-Xmx2048m # 设置最大jvm参数为2024m,也可以写作 -Xmx2g


[size=large]2. 堆外内存过小[/size]

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


[size=large]3. 栈溢出[/size]

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



[size=x-large]举例[/size]
从我个人遇到的场景出发,列举一下各场景下配置与生效范围。

[*] [size=large]eclipse所在的vm[/size]
eclipse安装目录下的eclipse.ini文件, -vmargs下面的行就是配置jvm参数的地方,在开发代码比较复杂的情况下,可以适当调大一些jvm参数,提升eclipse运行效率。


[*] [size=large]eclipse里Run As Application[/size]
配置方法:
eclipse -- preferences -- java -- Installed JREs -- 选择jre -- 点击Edit,具体操作路径见下图。
[img]http://dl2.iteye.com/upload/attachment/0100/3635/a2a36382-eefe-3d83-a0e0-d1dec809c71d.png[/img]
配置举例:

-Xms512m -Xmx1336m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m



[*] [size=large]eclipse里Run As JUnit Test[/size]
同上


[*] [size=large]命令行执行java命令[/size]
设置环境变量$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



[*] [size=large]命令行执行maven命令[/size]
设置环境变量$MAVEN_OPTS


[*] [size=large]maven test[/size]
如果在配置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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值