下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、tomcat内存溢出的三种情况toat内存溢出的缘由 在生产环境中tom内存设置不好很简单浮现内存溢出。造成内存溢出是不一样的,固然处理方式也不一样。 这里按照平常碰到的状况和相关资料举行一个总结。频繁的普通会有下面三种状况: 1.outofmemoryerror: java heap space 2.outofmemoryerror: pegen space 3.outofmemoryerror: unable to create new native thread. tomcat内存溢出解决计划 对于前两种状况,在应用本身没有内存泄露的状况下可以用设置tomcat jvm参数来解决。(-x
2、ms -xmx -xx:permsize -xx:maxpermsize) 最后一种可能需要调节操作系统和tomcat jvm参数同时调节才干达到目的。 第一种:是堆溢出。 缘由分析: jvm堆的设置是指java程序运行过程中jvm可以调配用法的内存空间的设置.jvm在启动的时候会自动设置heap size的值,其初始空间(即-xms)是物理内存的1/64,最大空间(-xmx)是物理内存的1/4。可以利用jvm提供的-xmn -xms -xmx等选项可举行设置。heap size 的大小是young generation 和tenur generaion 之和。 在jvm中假如98的时光是用于
3、gc且可用的heap size 不足2的时候将抛出此异样信息。 heap size 最大不要超过可用物理内存的80,普通的要将-xms和-xmx选项设置为相同,而-xmn为1/4的-xmx值。 没有内存泄露的状况下,调节-xms -xmx参数可以解决。 -xms:初始堆大小 -xmx:最大堆大小 但堆的大小受下面三方面影响: 1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,普通限制在1.5g2g;我在2003 server 系统下(物理内存:4g和6g,jdk:1.6)测试 1612m,64位操作系统对内存无限制。) 2.系统的可用虚拟内存限制; 3.系统的可用物
4、理内存限制。 堆的大小可以用法 java -xmx*m version 来测试。支持的话会浮现jdk的版本号,不支持会报错。 -xms -xmx普通配置成一样比较好比如 java_opts= -xms1024m -xmx1024m 其初始空间(即-xms)是物理内存的1/64,最大空间(-xmx)是物理内存的1/4。可以利用jvm提供的-xmn -xms -xmx等选项可 举行设置 实例,以下给出1g内存环境下java jvm 的参数设置参考: java_opts= quot;-server -xms800m -xmx800m -xx:permsize=64m -xx:maxnewsize=2
5、56m -xx:maxpermsize=128m -djava.awt.head=ue quot; java_opts= quot;-server -xms768m -xmx768m -xx:permsize=128m -xx:maxpermsize=256m -xx: newsize=192m -xx:maxnewsize=384m quot; catalina_opts= quot;-server -xms768m -xmx768m -xx:permsize=128m -xx:maxpermsize=256m -xx:newsize=192m -xx:maxnewsize=384m quo
6、t; 服务器为1g内存:java_opts= quot;-server -xms800m -xmx800m -xx:permsize=64m -xx:maxnewsize=256m -xx:maxpermsize=128m -djava.awt.headless=true quot; 服务器为64位、2g内存: java_opts='-server -xms1024m -xmx1536m -xx:permsize=128m -xx:maxnewsize=256m -xx:maxpermsize=256m' -解决计划1:- 前提:是执行startup.bat启动tomcat的方
7、式 linux服务器: 在/usr/local/apache-tomcat-5.5.23/bin 名目下的catalina.sh 添加:java_opts='-xms512m -xmx1024m' 或者 java_opts= quot;-server -xms800m -xmx800m -xx:maxnewsize=256m quot; 或者 catalina_opts= quot;-server -xms256m -xmx300m quot; windows服务器: 在catalina.bat最前面加入 set java_opts=-xms128m -xmx350m 或者se
8、t catalina_opts=-xmx300m -xms256m (区分是一个挺直设置jvm内存, 另一个设置tomcat内存,catalina_opts似乎可以与java_opts不加区分的用法) 基本参数解释 -client,-server 这两个参数用于设置虚拟机用法何种运行模式,一定要作为第一个参数,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。相反,server模式启动比client慢,但可获得更高的运行性能。 在windows上,缺省的虚拟机类型为client模式,假如要用法server模式,就需要在启动虚拟机时加-serve
9、r参数,以获得更高性能,对服务器端应用,推举采纳server模式,尤其是多个cpu的系统。在linux,solaris上缺省采纳server模式。 此外,在多cup下,建议用server模式 -xms 设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为1024的整数倍并且要大于1mb,可用k(k)或m(m)为单位来设置较大的内存数。初始堆大小为2mb。加“m”解释是mb,否则就是kb了。 例如:-xms6400k,-xms256m -xmx 设置虚拟机 的最大可用大小,缺省单位为字节。该值必需为1024整数倍,并且要大于2mb。可用k(k)或m(m)为单位来设置较大的内存数。缺省堆最大值
10、为64mb。 例如:-xmx81920k,-xmx80m 当应用程序申请了大内存运行时虚拟机抛出java.lang.outofmemoryerror: java heap space错误,就需要用法-xmx设置较大的可用内存堆。 permsize/maxpermsize:定义perm段的尺寸,即永远保存区域的大小,permsize为jvm启动时初始化perm的内存大小;maxpermsize为最大可占用的perm内存大小。在用户生产环境上普通将这两个值设为相同,以削减运行期间系统在内存申请上所花的开销。 假如用startup.bat启动tomcat,ok设置生效.够胜利的分配200m内存. -
11、解决计划2:- 前提:是执行startup.bat启动tomcat的方式 手动设置heap size windows服务器: 修改tomcat_home/bin/catalina.bat,在“echo quot;using catalina_base: $catalina_base quot;”上面加入以下行: java代码 set java_opts=%java_opts% -server -xms800m -xmx800m -xx:maxnewsize=256m 注:java_opts是保留从前设置。 linux服务器: 修改tomcat_home/bin/catalina.sh 在“ec
12、ho quot;using catalina_base: $catalina_base quot;”上面加入以下行: java_opts= quot;$java_opts -server -xms800m -xmx800m -xx:maxnewsize=256m quot; 注:$java_opts是保留从前设置。 -解决计划3:- 前提:是执行windows的系统服务启动tomcat的方式 但是假如不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了, 就是说set java_opts=-xms128m -xmx350m 没
13、起作用.上面分配200m内存就oom了. windows服务执行的是bintomcat.e.他读取注册表中的值,而不是catalina.bat的设置. 解决方法: 修改注册表hkey_local_machinesoftwareapache software foundationtomcat service managertomcat5parametersjavaoptions 原值为 -dcatalina.home= quot;c:apachegrouptomcat 5.0 quot; -djava.endor.= quot;c:apachegrouptomcat 5.0commonendor
14、sed quot; -xrs 加入 -xms300m -xmx350m 重起tomcat服务,设置生效 -解决计划4:- 前提:是执行windows的系统服务启动tomcat的方式 在安装tomcat时若有勾选 quot;nt service(nt/2000/xp only) quot; 则安装完成后在安装名目的 quot;bin quot;名目里会有一个tomcat.exe的档案 先把tomcat的服务停掉 在指令列模式下(运行里输入cmd) 将名目切换到tomcat的bin名目 用下面的指令把服务移除 tomcat -uninstall quot;apache tomcat 4.1 quo
15、t; 接下来,写个批处理。 内容如下 set servicename=apache tomcat 4.1 set catalina_home=e:tomcat 4.1.24 set classpath=d:j2sdk1.4.1_01lib set javaclasspath=%classpath% set javaclasspath=%javaclasspath%;?talina_home%binbootstrap.jar set javaclasspath=%javaclasspath%;?talina_home%commonlibservlet.jar set javaclasspath=
16、%javaclasspath%;%java_home%libtoo.jar tomcat.exe -install quot;%servicename% quot; quot;%java_home%jrebinserverjvm.dll quot; -djava.class.path= quot;%javaclasspath% quot; -dcatalina.home= quot;?talina_home% quot; -xms512m -xmx768m -start org.apache.catalina.startup.bootstrap -params start -stop org.
17、apache.catalina.startup.bootstrap -params stop -out quot;?talina_home%logsstdout.log quot; -err quot;?talina_home%logsstderr.log quot; 注重,从 tomcat.exe -install开头的是最后一行!不要手工回车换行把这一行分成了好几段。保存后在指令行下执行这个bat文件,注重执行的时候将“服务”窗口关闭。 其次种:永远保存区域溢出 缘由分析: permgen space的全称是permanent generation space,是指内存的永远保存区域,这块
18、内存主要是被jvm存放class和meta信息的,class在被loader时就会被放到permgen space中,它和存放类实例(instae)的heap区域不同,gc(garbage collection)不会在主程序运行期对permgen space举行清理,所以假如你的应用中有很class的话,就很可能浮现permgen space错误,这种错误常见在web服务器对jsp举行pre compile的时候。假如你的web app下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4m)那么就会产生此错误信息了。但目前的hibernate和spring项目中也很简单浮现这样的问题
19、。可能是因为这些框架会动态class,而且jvm的gc是不会清理pemgen space的,超过了jvm默认的大小(4m),导致内存溢出。 建议:将相同的第三方jar文件移置到tomcat/shared/lib名目下,这样可以达到削减jar 文档重复占用内存的目的。 这一个普通是加大-xx:permsize -xx:maxpermsize 来解决问题。 -xx:permsize 永远保存区域初始大小 -xx:permsize 永远保存区域初始最大值 这普通结合第一条用法,比如 set java_opts= -xms1024m -xmx1024m -xx:permsize=128m -xx:pe
20、rmsize=256m 有一点需要注重:java -xmx*m version 指令来测试的最大堆内存是 -xmx与 -xx:permsize的和 比如系统支持最大的jvm堆大小事1.5g,那 -xmx1024m -xx:permsize=768m 是无法运行的。 -解决计划1:- linux服务器: 在catalina.sh的第一行增强: java_opts= -xms64m -xmx256m -xx:permsize=128m -xx:maxnewsize=256m -xx:maxpermsize=256m 或者 在“echo quot;using catalina_base: $catalina_base quot;”上面加入以下行: java_opts= quot;-server -xx:permsize=64m -xx:maxpermsize=128m windows服务器: 在catalina.bat的第一行增强: set java_opts=-xms64m -xmx256m -xx:permsize=128m -xx:maxnewsize=256m -xx:maxpermsize=256m -解决计划
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度天津市公共营养师之三级营养师押题练习试题B卷含答案
- 2024年度四川省公共营养师之三级营养师通关题库(附答案)
- 2024年度四川省公共营养师之二级营养师能力测试试卷A卷附答案
- 中国环保胶袋行业发展前景预测及投资战略研究报告
- 2025标准版煤炭铁路运输合同范本
- 2020-2025年中国体外诊断试剂行业市场前景预测及投资方向研究报告
- 2025年中国手持卫星通信终端行业市场前瞻与投资战略规划分析报告
- 2025年汽车装箱项目可行性研究报告
- 中国垃圾桶市场供需现状及投资战略研究报告
- 中国轨道交通运营维护行业市场前景预测及投资战略研究报告
- 2024年加油站的年度工作总结范文(2篇)
- 甲醇制氢生产装置计算书
- T-JSREA 32-2024 电化学储能电站消防验收规范
- 2025年上半年江苏省常州市文广旅局下属事业单位招聘4人重点基础提升(共500题)附带答案详解
- 2023-2024学年福建省泉州市石狮市三年级(上)期末数学试卷
- 新时代高校马克思主义学院内涵式发展的现状和现实进路
- 铜工岗位安全操作规程(2篇)
- 【MOOC】隧道工程-中南大学 中国大学慕课MOOC答案
- 红色经典影片与近现代中国发展学习通超星期末考试答案章节答案2024年
- 剧作策划与管理智慧树知到期末考试答案2024年
- 铁路基础知识考试题库500题(单选、多选、判断)
评论
0/150
提交评论