背景:最近MAC上新装了Jboss,在终端中用命令行启动Jboss部署的war包没有问题,但是同样用IDEA启动时,就报异常:java.lang.OutOfMemoryError: PermGen space。
异常就是内存溢出,然后,经过仔细比对发现 JAVA_OPTS打印测日志不同。
1.用idea启动报错时,日志如下:
JAVA_OPTS: -Dprogram.name=run.sh -javaagent:/Users/bianlifeng/Library/Caches/IntelliJIdea2017.1/coverageJars/coverage-agent.jar=/private/var/folders/72/hr4m56jj3n5_xpz463z7xq4h0000gn/T/coverage1args
2.解决错误之后,日志如下:
JAVA_OPTS: -Dprogram.name=run.sh -Xms512m -Xmx512m -Xmn164m -XX:MaxPermSize=250m -XX:ReservedCodeCacheSize=64m -Xverify:none -Xnoclassgc -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -ea
问题分析:
从打印的日志可以看出,这是启动JVM时参数设置问题, 由于IDEA启动Jboss时,Jboss没有初始化JVM参数或者IEAD把原Jboss的参数给覆盖掉了,才导致出现以上的问题。
解决方法:
在IDEA配置Jboss的页面,输入一下参数即可,初始化JVM启动时的参数。
-Xms512m -Xmx512m -Xmn164m -XX:MaxPermSize=250m -XX:ReservedCodeCacheSize=64m -Xverify:none -Xnoclassgc -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -ea