一个关于jvm堆溢出引发的思考
来源:互联网 发布:vmware12安装linux 编辑:程序博客网 时间:2024/05/16 06:55
在本地测试无误的程序,放上正式服时,出现了堆溢出,本地是Windows系统下的,服务器是linux系统,后来经过测试发现是我在本地跑程序时,在eclipse中添加了如下参数:
此处先解释下上面各参数的的含义:
-Xms512m 堆的最小值
-Xmx1024m 堆的最大值
-Xmx1024m 堆的最大值
另外jvm垃圾回收采用分代搜集的方法,把堆分为三个部 分,新域,旧域和永久域。Jvm生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便获得使用期并进入旧域。在永久域中jvm则存储 class和method对象。就配置而言,永久域是一个独立域并且不认为是堆的一部分
-XX:MaxPermSize=512 设置永久域的最大值,
-XX:MaxPermSize=512 设置永久域的最大值,
-XX:ReservedCodeCacheSize=64m 缓存,可以自己改,超过也溢出,不过,溢出也无所谓,忽略即可
我猜想是不是因为tomcat没有设置上述参数导致的;因为一开始我都是依赖eclipse来启动tomcat的,所以tomcat在启动时就会去加载eclipse中配置的环境,而正式服服务器启动是脱离ide的,所以并没有这些参数设置?
为了验证我的猜想;
我特地去我本地拿tomcat跑程序,不依赖eclipse去启动,此时本地tomcat并未设置上述参数;结果如下:
果然本地的tomcat不依赖eclipse也出现了堆溢出
找到tomcat的配置文件:tomcat的安装目录下的bin下面
此处解释下,为什么会有2个Catalina文件,后缀名为.bat的是windows下的配置文件,后缀名为.sh的为Linux下的配置文件,话不多说
打开Catalina.bat文件,找到如下位置:
JAVA_OPTS:java相关运行参数
此处应该是配置了tomcat默认的JAVA_OPTS参数
在此处前面添加:(具体添加位置我还没有弄清楚,我是加在此处也有效,就暂时加在这了)
set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=64m
添加完成后,保存,重新启动tomcat:结果ok了
ok,下面我来讲下如何在Linux环境下,配置tomcat的Java运行环境:
首先同样的找到,tomcat的安装目录下的bin,然后打开Catalina.sh文件;
找到如下位置:
在此处添加:
JAVA_OPTS="-Xms512m -Xmx1024m -XX:ReservedCodeCacheSize=64m -XX:MaxPermSize=512m"
保存,ok!!!
以上参数的具体大小,和需要配置的参数,根据自己的实际情况更改
下面我将附上jvm参数大全:
0 0
- 一个关于jvm堆溢出引发的思考
- 关于一个小学算数引发的思考
- 递归引发的jvm栈溢出的理解--堆和栈的概念整理
- 递归引发的jvm栈溢出的理解--堆和栈的概念整理
- 一个需求引发的关于平板电脑的思考
- 四极管:一个需求引发的关于平板电脑的思考
- 关于中国产品的质量问题-一个暖水袋引发的思考
- 一个“笑话”引发的思考
- 一个细节引发的思考
- 一个苹果引发的思考
- 一个问题引发的思考
- 一个帖子引发的思考
- 一个程序员引发的思考
- 一个测试引发的思考
- 一个BUG引发的思考
- 一个空格引发的思考
- 一个demo引发的思考
- 一个案例引发的思考
- 关于Eclipse快捷键操作会了这些你就是大神!
- 黑盒测试
- 向linux内核版本号添加字符/为何有时会自动添加“+”号
- script: [Errno 8] Exec format error
- AngularJS进阶(四)ANGULAR.JS实现下拉菜单单选
- 一个关于jvm堆溢出引发的思考
- Deep Learning in NLP (一)词向量和语言模型
- Unity5 Sprite 图集打包 AssetBundle 更新探索
- 【算法学习笔记】-动态规划
- AngularJS进阶(五)Angular实现下拉菜单多选
- php 常用的内置函数
- 从零开始自学Swift(五)
- hdu 1113 Word Amalgamation
- 机器学习