您的位置:首页 > 其它

JVM常用参数设置

2018-01-26 17:11 253 查看
昨天再给生产环境的weblogic打补丁时遇到以下错误:

打补丁命令:

./bsu.sh -install -patch_download_dir=/home/lip/Oracle/Middleware/utils/bsu/cache_dir -patchlist=FMJJ -prod_dir=/home/lip/Oracle/Middleware/wlserver_10.3


Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.newNode(HashMap.java:1734)
at java.util.HashMap.putVal(HashMap.java:630)
at java.util.HashMap.put(HashMap.java:611)
at com.bea.cie.common.dao.xbean.XBeanDataHandler.loadPropertyMap(XBeanDataHandler.java:778)
at com.bea.cie.common.dao.xbean.XBeanDataHandler.<init>(XBeanDataHandler.java:99)
at com.bea.cie.common.dao.xbean.XBeanDataHandler.createDataHandler(XBeanDataHandler.java:559)
at com.bea.cie.common.dao.xbean.XBeanDataHandler.getComplexValue(XBeanDataHandler.java:455)
at com.bea.plateng.patch.dao.cat.PatchCatalogHelper.getPatchDependencies(PatchCatalogHelper.java:442)
at com.bea.plateng.patch.dao.cat.PatchCatalogHelper.getPatchDependencies(PatchCatalogHelper.java:464)
at com.bea.plateng.patch.dao.cat.PatchCatalog.getPatchDependencies(PatchCatalog.java:56)
at com.bea.plateng.patch.dao.cat.PatchCatalogHelper.getInvalidatedPatchMap(PatchCatalogHelper.java:1621)
at com.bea.plateng.patch.PatchSystem.updatePatchCatalog(PatchSystem.java:436)
at com.bea.plateng.patch.PatchSystem.refresh(PatchSystem.java:130)
at com.bea.plateng.patch.PatchSystem.<init>(PatchSystem.java:114)
at com.bea.plateng.patch.PatchSystem.<clinit>(PatchSystem.java:41)
at com.bea.plateng.patch.Patch.main(Patch.java:279)


查看错误信息,是内存不足导致,于是修改bsu.sh文件中的内存配置:

原值:MEM_ARGS="-Xms256m -Xmx512m"
修改后:MEM_ARGS="-Xms512m -Xmx1024m"


修改之后,又出现以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Arrays.java:3664)
at java.lang.String.<init>(String.java:207)
at java.lang.StringBuilder.toString(StringBuilder.java:407)
at java.lang.Class.argumentTypesToString(Class.java:3156)
at java.lang.Class.getMethod(Class.java:1786)
at com.bea.cie.common.dao.xbean.XBeanDataHandler.isValueSet(XBeanDataHandler.java:958)
at com.bea.cie.common.dao.xbean.XBeanDataHandler.getValueFromObject(XBeanDataHandler.java:589)
at com.bea.cie.common.dao.xbean.XBeanDataHandler.getSimpleValue(XBeanDataHandler.java:431)
at com.bea.plateng.patch.dao.cat.PatchDependency.getRule(PatchDependency.java:48)
at com.bea.plateng.patch.dao.cat.PatchCatalogHelper.getInvalidatedPatchMap(PatchCatalogHelper.java:1625)
at com.bea.plateng.patch.PatchSystem.updatePatchCatalog(PatchSystem.java:436)
at com.bea.plateng.patch.PatchSystem.refresh(PatchSystem.java:130)
at com.bea.plateng.patch.PatchSystem.setCacheDir(PatchSystem.java:201)
at com.bea.plateng.patch.Patch.main(Patch.java:281)


继续扩大Xmx内存,配置修改为:

MEM_ARGS="-Xms512m -Xmx1536m"


然后就没有问题了。

查阅网上资料,记录总结一下,遇到以下几种问题的解决方案:

一、

java.lang.OutOfMemoryError: Java heap space。


解决方案:增加堆内存 -Xmx2048m

原因:堆内存不足。你正准备创建一个新的对象,但是这个要创建的对象需要的内存已经超过了虚拟机所剩的了。虚拟机会尝试通过full GC来回收内存,如果不行的话,就会抛出这个信息。

二、

java.lang.OutOfMemoryError: PermGen space


解决方案:增加持久代内存 -XX:MaxPermSize=256m

原因:这个和第一个现象差不多,不过这里准备分配内存的空间是持久代。同样的,你的空间已经不够了,所以虚拟机善意的提醒了你一下。

三、

java.lang.OutOfMemoryError: GC overhead limit exceeded


解决方案:把-XX:-UseGCOverheadLimit加到启动脚本里

原因:这个问题有点特殊。这里没有提示说堆还是持久代有问题,虚拟机只是告诉你你的程序花在垃圾回收上的时间太多了,却没有什么见效。默认的话,如果你98%的时间都花在GC上并且回收了才不到2%的空间的话,虚拟机才会抛这个异常。

更多错误解决办法,参考:http://hugnew.com/?p=404

Eclipse中配置JVM学习参考:http://blog.csdn.net/mr__fang/article/details/47723767
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: