tomcat内存溢出

合集下载

Tomcat内存溢出及线程紊乱问题研究

Tomcat内存溢出及线程紊乱问题研究

Tomcat内存溢出及线程紊乱问题研究摘要:在很多基于B/S结构的网站架构中,WEB容器内存溢出及线程紊乱问题比较隐蔽,很多时候在测试阶段并不能发现,只有在现实中大规模数据和高并发量的情况下问题才逐渐的暴露出来。

因此,在网站正式发布前代码进行走查和技术改进,并修改相关服务器软件的配置,可以在很大程度上减少此类事件的发生。

本文以Tomcat为例,对WEB容器在数据传输过程中内存溢出及线程紊乱的表现、原因及解决方案作了简要论述。

关键词:Tomcat;WEB容器;内存溢出;线程紊乱随着Internet技术的普及,各地方学校、研究所和商业单位都在积极进行基础教育资源网和资源库的建设。

然而,随着资源网使用人数的不断增加,其并发量也在急剧增长,对WEB服务器的承压性和稳定性提出了新的挑战。

然而大多数WEB容器均有内存限制,因此,在服务器没有内存还有很大空缺的情况下,WEB容器内存首先溢出,经常报“OutOfMemory”错误,并与其他因素一道引发了线程紊乱,导致应用系统的某些功能重复执行,并且引起了数据库服务器崩溃、系统越来越慢直到死机等问题。

随着互联网技术的发展,基于WEB容器大规模数据传输以及并发量的需求已经日渐突出,而数据传输效率、WEB应用服务器性能以及应用系统的稳定性等因素直接影响了数据传输的质量。

在以Tomcat为WEB容器的环境中,若以上问题处理不当,则很多时候表现为Tomcat内存溢出以及线程紊乱,造成服务器宕机,严重影响正常的网站运行。

1Tomcat内存溢出及线程紊乱的主要表现Tomcat内存溢出主要是通过系统速度、系统性能表现以及系统日志来反映的。

通过对日志文件和系统表现的分析与判断,即可断定是否为内存溢出;线程紊乱是指在Web容器中发生的线程异常的情况,其很多时候是在内存溢出之后出现的,通过对应用系统的操作日志及WEB容器的相关日志即可判断。

1.1Tomcat内存溢出主要表现1)系统的速度越来越慢,甚至出现死机的现象。

内存溢出的三种情况及系统配置解决方案

内存溢出的三种情况及系统配置解决方案

内存溢出的三种情况及系统配置解决方案内存溢出是指程序在运行过程中申请的内存超过了系统或者进程所能提供的上限。

导致内存溢出的原因可能是程序中存在内存泄漏、内存分配过多或者递归调用过深等。

下面将介绍三种常见的内存溢出情况及其系统配置解决方案。

1.程序内存泄漏导致内存溢出:内存泄漏指程序在运行过程中动态分配内存空间后,没有对其进行释放,导致一部分内存无法再次使用。

长时间运行的程序中,如果内存泄漏较为严重,系统可用内存会不断减少,直到最终耗尽所有内存资源。

解决方案:使用内存泄漏检测工具来检测和修复程序中的内存泄漏问题。

同时,可以考虑使用自动内存管理的编程语言,如Java和Python,在程序运行过程中自动回收未使用的内存。

2.内存分配过多导致内存溢出:解决方案:优化程序的内存使用,尽可能减小内存分配的数量和大小。

可以通过使用更高效的内存管理算法来减少内存碎片,或者使用内存池技术来提前分配一定量的内存供程序使用。

3.递归调用过深导致内存溢出:递归函数在每次调用时会将一定量的数据压入栈中,如果递归调用层数过深,栈的空间可能会超过系统的限制,从而导致内存溢出。

这种情况通常发生在没有设置递归终止条件或者递归层数过多的情况下。

解决方案:优化递归算法,设置合适的递归终止条件,避免递归调用过深。

如果无法避免使用递归算法,可以考虑使用尾递归或者迭代算法来替代递归调用,减少栈的压力。

在系统配置方面,可以采取以下措施来预防和解决内存溢出问题:1.增加系统内存容量:如果内存溢出是由于系统可用内存不足引起的,可以考虑增加系统的内存容量。

这可以通过增加物理内存条或者使用虚拟内存技术来实现。

虚拟内存技术会将部分磁盘空间用作缓存,并将一部分数据暂时存储在磁盘上,以释放内存空间。

2. 调整JVM参数:对于使用Java虚拟机(JVM)的应用程序,可以通过调整JVM的参数来控制内存的分配和管理。

例如,可以通过设置-Xmx参数来限制JVM使用的最大堆内存大小,或者通过设置-XX:MaxPermSize参数来限制JVM使用的最大持久代(PermGen)内存大小。

内存溢出的三种情况及系统配置解决方案

内存溢出的三种情况及系统配置解决方案

内存溢出的三种情况及系统配置解决方案内存溢出是指程序在运行过程中申请的内存超过了系统所分配的内存空间,导致程序崩溃或出现异常。

内存溢出通常是由于程序设计或系统配置问题引起的。

以下是三种常见的内存溢出情况及相应的系统配置解决方案。

1.单个进程占用内存过大:当一些进程在运行过程中占用的内存超过系统分配的限制时,就会导致内存溢出。

这种情况通常发生在大型应用程序或者后台服务运行时。

解决方案:-增加物理内存:在服务器或计算机中增加物理内存,以满足进程运行所需的内存空间。

-调整虚拟内存:将物理内存和虚拟内存结合使用,允许操作系统使用虚拟内存作为物理内存的扩展,从而提供更大的内存容量。

-优化应用程序:通过优化程序代码、降低内存使用、合理管理资源等方法,减少进程对内存的占用。

2.长时间运行的应用程序产生泄露:有些应用程序在长时间运行后会产生内存泄露的问题,即分配并使用内存后没有将其释放,导致内存占用逐渐增加,最终导致内存溢出。

解决方案:-使用垃圾回收机制:在一些支持垃圾回收的编程语言中,通过垃圾回收机制可以自动释放未使用的内存。

开发人员可以使用这些机制来解决内存泄露问题。

-引入内存监控工具:使用内存监控工具来检测应用程序中的内存泄露,定位并解决导致内存泄露的代码问题。

-定期重启应用程序:定期重启应用程序可以清理内存,防止内存泄露导致内存溢出。

3.大规模并发请求导致内存压力增加:在高并发的情况下,当系统同时处理大量的请求时,每个请求所占用的内存可能累积增加,导致整体内存压力增加,最终出现内存溢出。

解决方案:-加大系统负载均衡能力:通过增加负载均衡器、引入缓存机制等方式,将请求分散到多台服务器上,减少单台服务器的内存压力。

-优化数据库访问:对于一些频繁读写数据库的操作,可以通过合理的数据库设计、使用索引、缓存查询结果等方法,减少对数据库的访问,降低内存压力。

-调整服务器配置:合理设置服务器的最大并发连接数、线程池大小等参数,根据实际需求分配内存资源。

Dockertomcat的设置内存大小配置方式

Dockertomcat的设置内存大小配置方式

Dockertomcat的设置内存⼤⼩配置⽅式安装再docker中的tomcat,在下载⼤⽂件或者某些情况下,会出现tomcat的内存溢出等情况,所以需要配置tomcat的内存⼤⼩,docker中的tomcat内存⼤⼩配置有两种⽅式:⼀、挂载docker中的配置⽂件通过将docker中tomcat的catalina.sh配置⽂件挂载到宿主机中,然后再catalina.sh配置jvm内存⼤⼩即可。

1、需要重新运⾏⼀个tomcat容器(注意:端⼝和容器名称不能重复)docker run -d \-v /server/webapps:/usr/local/tomcat/webapps/ \-v /server/catalina.sh:/usr/local/tomcat/bin/catalina.sh \-v /server/logs/demo:/server/logs/demo \-e TZ="Asia/Shanghai" \--privileged=true \--name demo \-p 8080:8080 \tomcat8说明:* -v /server/webapps:/usr/local/tomcat/webapps/ 挂载当前项⽬的运⾏⽬录到tomcat下的webapps* -v /server/catalina.sh:/usr/local/tomcat/bin/catalina.sh 挂载宿主机的catalina.sh到docker中tomcat下的catalina.sh* -v /server/logs/demo:/server/logs/demo 挂载⽇志到宿主机中* -e TZ="Asia/Shanghai" 设置时区* --privileged=true 设置拥有容器中的真正的root权限* -p 8080:8080 映射端⼝* tomcat8 镜像的名称2、catalina.sh中的配置内存cygwin=false下⾯加⼊:JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=256m"-xms 初始化堆内存-xmx 最⼤堆内存⼆、直接修改tomcat容器的catalina.sh的配置可以直接进⼊容器中修改tomcat的catalina.sh的配置⽂件,不过该⽅法不推荐,因为以后再次秀挂⽐较⿇烦,并且不⽅便配置,如果需要重新运⾏容器的时候,不知道容器中的内存⼤⼩的配置1、进⼊容器docker exec -it <container_name> /bin/bash2、找到catalina.sh配置⽂件, 并增加配置(第⼀步中增加的配置语句即可)// 如果没有vi 命令,则需要安装vi /usr/local/tomcat/bin/catalina.sh// 退出容器,并重新启动exitdocker restart <containner_name>注意:如果修改Catalina.sh的时候提⽰该⽂件是⼀个只读⽂件或者提⽰没有权限修改,那么则需要以root权限进⼊容器,具体的⽅法如下补充:Docker容器中的root权限获取有⼀些操作是经常需要进⼊到docker容器中操作的,例如突然需要修改某个配置⽂件等,但是修改该⽂件是需要root权限,可以参考下⾯的解决⽅案通常修改⽂件时会提⽰:read-only file system 或者 Permission denied1、挂载配置⽂件在运⾏docker容器时,可以将该配置⽂件复制⼀份到宿主机,然后run的时候,加载-v参数,将宿主机的配置⽂件挂载到docker中即可。

session不及时释放导致内存溢出的功能问题分析

session不及时释放导致内存溢出的功能问题分析

session不及时释放导致内存溢出的功能问题分析背景:做⼀个⽹站的时候,觉察服务器上⼀段⼯夫尤其不安宁,每隔⼀段⼯夫就会报”OutOfMemoryError: PermGen space”讹谬,于是⽹站也就歇菜了.安排环境:windows2003,tomcat6.0,spring mvc2.5帮助分析⼯具:jprofile6,visualvm,mat分析过程:1.⾃我察看阶段。

由于是报perm区失常,我率先想到,系统默认perm区太⼩,想想该当要调剂perm区⼤⼩,敞开catalina.bat,设置了JAVA_OPTS,JAVA_OPTS="-server -Xms512m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=784m"这么设置后,模仿歇菜时候的情形举⾏压⼒测验,觉察蛮安宁的,未曾揭⽰什么问题,这时⼜精细察看代码,⼤约就未曾揭⽰频繁创⽴不可回收的草芥对象,于是就先这么吧。

过了⼀段⼯夫觉察⼜出问题了,还是perm溢出。

随后我计算下perm区曾经够⼤了,怎么还会报这个失常,此刻极其弥蒙中....2.⼯具帮助分析。

visualvm 利⽤visualvm看看perm区是否真的像传说中说的那样---"perm溢出了",看来还是恳挚点⽤apache⾃带的⼯具做压⼒测验看看是不是这个地⽅引起的测验⼯具⽤apache⾃带的 ./ab -n 100000 -c 40 http://om/class/kw-童卫⾐.html40个并发的时候perm区在30m处跌停,⼤约坚持0增长。

看来和perm区没联系。

perm区看下heap区觉察问题了 40并发下到尔后⼤约坚持5分钟顺次full gc了,这么开⼼啊,本来heap区出问题了,多个利⽤放在⼀个tomcat⾥的时候,万⼀⼀个利⽤刚好这么了,刚开始的heap,导航仪好像也没什么问题,烦闷了~~~继续弥蒙~~~~只能期待,等着出问题吧...半个⼩时过去了,还是这么....陡然觉察惊喜了。

java异常解决方案

java异常解决方案

java异常解决方案一、Hibernate(1)org.hibernate.TransientObjectException: object references an unsaved transient instance....(2)org.springframework.orm.hibernate3.HibernateSystemException: Don't change the reference to a collection withcascade="all-delete-orphan": entity.Klass.students; nested exception is org.hibernate.HibernateException: Don't change the reference to a collection with cascade="all-delete-orphan": entity.Klass.students二、Tomcat(1)tomcat启动时报错:java.io.EOFException(2)tomcat内存溢出三、JAVA基本(1)ng.ClassCastException:(2)ng.UnsupportedClassVersionError: Bad version number in .class file四、JSP(1)javax.servlet.jsp.JspException:(2)org.apache.jasper.JasperException: Unable to compile class for JSP:(3)Servlet.service() for servlet jsp threw exceptionng.Error: Unresolved compilation problem:(4)ng.Error: Unresolved compilation problem:The method contextInitialized(ServletContextEvent) of type CreateDataSourceTableListener must override a superclass method(5)Servlet.service() for servlet jsp threw exception ng.Error: Unresolved compilation problem:The method setCharacterEncoding(String) is undefined for the type ServletResponse五、SSH整合(1)ng.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener(2)Exception starting filter struts2 Class:com.opensymphony.xwork2.spring.SpringObjectFactory File: SpringObjectFactory.java Method: getClassInstance(3)(7)(8)org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'biz' defined in class path... (4)Exception starting filter struts2The action name cannot be the same as the action suffix [Action] - Class: org.apache.struts2.convention.SEOActionNameBuilder (5)avax.management.RuntimeErrorException: Error thrown in preDeregister methodCaused by: ng.NoClassDefFoundError:org/apache/struts2/util/ObjectFactoryDestroyable(6)Unable to load configuration. - bean -jar:file:/D:/Tomcat/tomcat/apache-tomcat-6.0.30/webapps/tes t/WEB-INF/lib/struts2-core-2.2.3.1.jar!/struts-default.xml: 29:72六、Struts(1)ng.NoSuchMethodException:action.StudentAction.getAllStudent()(2)Caused by: ng.ClassCastException:org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration (3)No result defined for action and result七、Android(1)There is no android project named 'cm-android'一、Hibernate一(1)org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: er某个对象的某个属性是一个实体,在这个实体没有保存之前就保存这个对象而造成了这个错误。

Tomcat并发优化、内存配置、垃圾回收、宕机预防

Tomcat并发优化、内存配置、垃圾回收、宕机预防

Tomcat并发优化、内存配置、垃圾回收、宕机预防Tomcat并发优化、内存配置、垃圾回收、宕机预防⽬录Tomcat并发优化、内存配置、垃圾回收、宕机预防⽬录序⾔⼀、Tomcat并发优化(1) tomcat并发参数(2) tomcat并发配置⼆、Tomcat内存配置(1) tomcat内存参数(2) tomcat内存配置三、Tomcat垃圾回收(1) JVM中对象的划分及管理(2) jvm垃圾搜集参数(3) tomcat垃圾搜集配置四、Tomcat宕机预防(1) TCP端⼝状态(2) Windows系统下的TCP参数(3) tomcat假死分析及预防五、结语序⾔这⼏天系统问题层出不穷,服务器并发性差、tomcat内存溢出、假死宕机、⽹络阻塞,搞得我好不难受,寝⾷难安。

但是经过⾼⼈指点、⽹络资料,再加上实践运⾏测试,系统逐渐稳定下来,性能也提升了不少,轻松之余,为⼤家分享我的经历,希望⼤家能够有所收获。

⼀、Tomcat并发优化tomcat并发量与其配置息息相关,⼀般的机器⼏百的并发量⾜矣,如果设置太⾼可能引发各种问题,内存、⽹络等问题也能在⾼并发下暴露出来,因此,配置参数的设置⾮常重要。

(1) tomcat并发参数maxThreads:最⼤的并发请求数,当cpu利⽤率⾼的时候,不宜增加线程的个数,当cpu利⽤率不⾼,⼤部分是io阻塞类的操作时,可以适当增加该值。

maxSpareThreads:Tomcat连接器的最⼤空闲 socket 线程数acceptCount:当处理任务的线程数达到最⼤时,接受排队的请求个数connectionTimeout:⽹络连接超时,单位毫秒enableLookups:若为false则不进⾏DNS查询,提⾼业务能⼒应设置为falsedisableUploadTimeout:若为true则禁⽤上传超时 以上是⼀些⽐较常⽤的参数,Tomcat中server.xml配置详解会有更加详细的介绍。

Tomcat6 一些调优设置内存和连接数

Tomcat6 一些调优设置内存和连接数

Tomcat6 一些调优设置内存和连接数公司的一个服务器使用Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64)TOMCAT_HOME/bin/catalina.sh添加一行:JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"问题解决(可能为调用JAR包过多原因)下面是网上看到一些设置JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M-XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "当在对其进行并发测试时,基本上30个USER上去就当机了,还要修改默认连接数设置:以下红色四行TOMCAT6中好相没有,手工加上就可以了,基本上可以解决连接数过大引起的死机。

具体数值可跟据实际情况设置<Connector port="80" protocol="HTTP/1.1"maxThreads="600"minSpareThreads="100"maxSpareThreads="500"acceptCount="700"connectionTimeout="20000"redirectPort="8443" />这样设置以后,基本上没有再当机过。

maxThreads="600" ///最大线程数minSpareThreads="100"///初始化时创建的线程数maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

内存溢出的解决思路

内存溢出的解决思路

内存溢出的解决思路内存溢出是指应⽤系统中存在⽆法回收的内存或使⽤的内存过多,最终使得程序运⾏要⽤到的内存⼤于虚拟机能提供的最⼤内存。

引起内存溢出的原因有很多种,常见的有以下⼏种: 1.内存中加载的数据量过于庞⼤,如⼀次从数据库取出过多数据; 2.集合类中有对对象的引⽤,使⽤完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产⽣过多重复的对象实体; 4.使⽤的第三⽅软件中的BUG; 5.启动参数内存值设定的过⼩;内存溢出的解决⽅案:第⼀步,修改JVM启动参数,直接增加内存。

(-Xms,-Xmx参数⼀定不要忘记加。

) 第⼆步,检查错误⽇志,查看“OutOfMemory”错误前是否有其它异常或错误。

第三步,对代码进⾏⾛查和分析,找出可能发⽣内存溢出的位置。

重点排查以下⼏点: 1.检查对数据库查询中,是否有⼀次获得全部数据的查询。

⼀般来说,如果⼀次取⼗万条记录到内存,就可能引起内存溢出。

这个问题⽐较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,⼀次查询就有可能引起内存溢出。

因此对于数据库查询尽量采⽤分页的⽅式查询。

2.检查代码中是否有死循环或递归调⽤。

3.检查是否有⼤循环重复产⽣新对象实体。

4.检查对数据库查询中,是否有⼀次获得全部数据的查询。

⼀般来说,如果⼀次取⼗万条记录到内存,就可能引起内存溢出。

这个问题⽐较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,⼀次查询就有可能引起内存溢出。

因此对于数据库查询尽量采⽤分页的⽅式查询。

5.检查List、MAP等集合对象是否有使⽤完后,未清除的问题。

List、MAP等集合对象会始终存有对对象的引⽤,使得这些对象不能被GC回收。

第四步,使⽤内存查看⼯具动态查看内存使⽤情况从内存溢出看Java 环境中的内存结构 作为有个java程序员,我想⼤家对下⾯出现的这⼏个场景并不陌⽣,倍感亲切,深恶痛绝,抓⼼挠肝,⼀定会回过头来问为什么为什么为什么会这样,嘿嘿,让我们看⼀下我们⽇常在开发过程中接触内存溢出的异常: Exception in thread "main" [Full ng.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Unknown Source)at java.util.Arrays.copyOf(Unknown Source)at java.util.ArrayList.grow(Unknown Source)at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)at java.util.ArrayList.ensureCapacityInternal(Unknown Source)at java.util.ArrayList.add(Unknown Source)at oom.HeapOOM.main(HeapOOM.java:21) Exception in thread "main" ng.StackOverflowErrorat java.nio.CharBuffer.arrayOffset(Unknown Source)at sun.nio.cs.UTF_8.updatePositions(Unknown Source)at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(Unknown Source)at sun.nio.cs.UTF_8$Encoder.encodeLoop(Unknown Source)at java.nio.charset.CharsetEncoder.encode(Unknown Source)at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)at sun.nio.cs.StreamEncoder.write(Unknown Source)at java.io.OutputStreamWriter.write(Unknown Source)at java.io.BufferedWriter.flushBuffer(Unknown Source)at java.io.PrintStream.write(Unknown Source)at java.io.PrintStream.print(Unknown Source)at java.io.PrintStream.println(Unknown Source)ng.OutOfMemoryError: PermGen spaceException in thread "main" ng.OutOfMemoryErrorat sun.misc.Unsafe.allocateMemory(Native Method)at oom.DirectMemoryOOM.main(DirectMemoryOOM.java:23) 是不是有⼤家很熟悉的,遇见这样的问题解决起来可能不简单,但是如果现在让⼤家写个程序,故意让程序出现下⾯的异常,估计能很快写出来的也不是很多,这就要求开发⼈员对于java内存区域以及jvm规范有⽐较深的了解。

启动tomcat时报错:http-nio-8080-exec-10

启动tomcat时报错:http-nio-8080-exec-10

启动tomcat时报错:http-nio-8080-exec-10问题原因:Java的内存溢出故障现象为:cat /apps/links/tomcat/logs/catalina.out2018-11-05 16:08:55[ERROR]-[Thread: http-nio-8080-exec-10]-[io.jpress.admin.controller._AttachmentController.processImage()]: processThumbnail errorng.IllegalArgumentException: sourceRegion.x < 0!at javax.imageio.IIOParam.setSourceRegion(IIOParam.java:188)at io.jpress.utils.ImageUtils.readBuffereImage(ImageUtils.java:112)at io.jpress.utils.ImageUtils.scale(ImageUtils.java:83)at io.jpress.utils.ImageUtils.scale(ImageUtils.java:61)at io.jpress.admin.controller._AttachmentController.processThumbnail(_AttachmentController.java:166)at io.jpress.admin.controller._AttachmentController.processImage(_AttachmentController.java:149)at io.jpress.admin.controller._AttachmentController.doUpload(_AttachmentController.java:127)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at ng.reflect.Method.invoke(Method.java:498)at com.jfinal.aop.Invocation.invoke(Invocation.java:73)at io.jpress.core.interceptor.ActionCacheClearInterceptor.intercept(ActionCacheClearInterceptor.java:27)at com.jfinal.aop.Invocation.invoke(Invocation.java:67)at io.jpress.core.interceptor.HookInterceptor.intercept(HookInterceptor.java:31)at com.jfinal.aop.Invocation.invoke(Invocation.java:67)at io.jpress.interceptor.AdminInterceptor.intercept(AdminInterceptor.java:52)at com.jfinal.aop.Invocation.invoke(Invocation.java:67)at io.jpress.interceptor.GlobelInterceptor.intercept(GlobelInterceptor.java:33)at com.jfinal.aop.Invocation.invoke(Invocation.java:67)at io.jpress.core.interceptor.JI18nInterceptor.intercept(JI18nInterceptor.java:48)at com.jfinal.aop.Invocation.invoke(Invocation.java:67)at com.jfinal.core.ActionHandler.handle(ActionHandler.java:82)at io.jpress.core.MyDruidStatViewHandler.handle(MyDruidStatViewHandler.java:43)at io.jpress.core.cache.ActionCacheHandler.handle(ActionCacheHandler.java:40)at io.jpress.core.JHandler.handle(JHandler.java:81)at io.jpress.core.cache.ActionCacheHandler.handle(ActionCacheHandler.java:40)at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)▽ at .NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)at .SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at ng.Thread.run(Thread.java:748)解决⽅案⼀:设置MyEclipse中Tomcat使⽤的Jdk的VM arguments:-Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=512m如图:解决⽅法⼆:⼿动设置MaxPermSize⼤⼩修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上⾯加⼊以下⾏:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512mcatalina.sh下为:JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"。

tomcat OutOfMemory错误解决方法

tomcat OutOfMemory错误解决方法

tomcat OutOfMemory错误解决方法部署应用服务到tomcat下,可能会抛出内存溢出异常,如下:Exception in thread "Timer-1" ng.OutOfMemoryError: PermGen space为了解决tomcat在大进行大并发请求时,出现内存溢出的问题,请修改tomcat的内存大小,其中分为以下两种方式:一、使用catalina.bat 等命令行方式运行的tomcat1、windows环境下,修改tomcat\bin\Catalina.bat 文件在166行左右rem Execute Java with the applicable properties ”以下每行%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS%-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%"-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%"-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%在%DEBUG_OPTS% 后面添加-Xms256m -Xmx512m2、linux环境下,打开在Tomcat的安装目录的bin文件的 ./bin/catalina.sh 文件,进入编辑状态.在注释后面加上如下脚本:JAVA_OPTS='-Xms512m -Xmx1024m'JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"或者,在echo "Using CATALINA_BASE: $CATALINA_BASE" 下添加一行echo "Using CATALINA_BASE: $CATALINA_BASE"JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m"echo "Using CATALINA_HOME: $CATALINA_HOME"echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"说明:JAVA_OPTS='-Xms512m -Xmx1024m' 是设置Tomcat使用的内存的大小; -XX:PermSize=64M-XX:MaxPermSize=256m 指定类空间(用于加载类)的内存大小保存后,重新以命令行的方式运行tomcat ,即可,然后通过最后面介绍的如何观察tomcat现有内存情况的方法进行查看是否已经变更成功。

使用MAT工具进行内存溢出定位及分析

使用MAT工具进行内存溢出定位及分析

内存溢出监控及分析问题所在一、内存溢出&内存泄漏的名词解释内存溢出(out of memory):就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。

内存泄露(memory leak):是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

二、何时会抛出内存溢出错误何时会抛出OutOfMemoryException,并不是内存被耗空的时候才抛出∙JVM98%的时间都花费在内存回收∙每次回收的内存小于2%满足这两个条件将触发OutOfMemoryException,这将会留给系统一个微小的间隙以做一些Down之前的操作,比如手动打印Heap Dump。

Q:为什么崩溃前垃圾回收的时间越来越长?A:根据内存模型和垃圾回收算法,垃圾回收分两部分:内存标记、清除(复制),标记部分只要内存大小固定时间是不变的,变的是复制部分,因为每次垃圾回收都有一些回收不掉的内存,所以增加了复制量,导致时间延长。

所以,垃圾回收的时间也可以作为判断内存泄漏的依据Q:为什么Full GC的次数越来越多?A:因此内存的积累,逐渐耗尽了年老代的内存,导致新对象分配没有更多的空间,从而导致频繁的垃圾回收Q:为什么年老代占用的内存越来越大?A:因为年轻代的内存无法被回收,越来越多地被Copy到年老代三、内存溢出的一些现象现象1、后台日志会报错- Out of Memory当Java程序申请内存,超出VM可分配内存的时候,VM首先可能会垃圾回收(GC),如果GC完还是不够,或者申请的直接超够VM可能有的,就会抛出内存溢出异常。

从VM规范中我们可以得到,以下几种异常:ng.StackOverflowError:(很少)ng.OutOfMemoryError:heap space(比较常见)ng.OutOfMemoryError: PermGen space (经常出现)ng.OutOfMemoryError: GC overhead limit exceeded(某项操作使用大量内存时发生)现象2、通过loadrunner的windows监控图的部分指标走势能猜测是否发生内存泄漏。

Tomcat配置及使用..

Tomcat配置及使用..
2、Tomcat服务器是一个免费的开源的Web 应用服务器,是Apache 软件基 金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及 个人共同开发而成。因为Tomcat 技术先进、性能稳定,运行时占用的系统 资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能; 而且很重要的是她免费,因而深受Java 爱好者的喜爱并得到了部分软件开 发商的认可,成为目前比较流行的Web 应用服务器。而且由于开源,它还在 不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入 新的功能。

Linux下tomcat的安装使用
3、将sguap-server上传(或拷贝)至以下路径: /usr/local/www/apache-tomcat-uap/webapps/sguap-server。
4、/usr/local/www/apache-tomcat-uap/conf下的server.xml将: <Connector port="8080" protocol="HTTP/1.1"
Linux下tomcat的安装使用 解压安装文件:apache-tomcat-6.0.41.tar.gz,到/usr/local/www/apache-tomcat-portal
现阶段我们在国网实施项目使用到的tomcat都是免安装,只需解压就可以直接使用, 以启明星新门户的安装为讲一下tomcat的使用。
connectionTimeout="20000" redirectPort="8443" /> 修改为 <Connector port="10010" protocol="HTTP/1.1" connectionTimeout="20000

解决 Tomcat 服务崩溃的问题

解决 Tomcat 服务崩溃的问题

解决 Tomcat 服务崩溃的问题Tomcat 服务器是一种用来处理 Web 应用程序的开源服务器。

由于其高效、稳定的特点,近年来在 Web 开发领域得到了广泛应用。

但是,有时候 Tomcat 服务也会遇到崩溃的问题,这对于系统管理员和开发人员来说都是非常头痛的事情。

在本文中,我们将探讨如何解决 Tomcat 服务崩溃的问题,以使我们的 Web 应用程序能够更加稳定地运行。

1. 清理 Tomcat 服务器日志当 Tomcat 服务器出现崩溃的问题时,第一个要想到的就是查看 Tomcat 服务器的日志文件。

日志文件中记录了服务器的运行状态、错误信息以及异常堆栈等信息,可以帮助我们定位问题的根源。

如果日志文件过大,可能会占用过多的硬盘空间,甚至会导致服务器出现异常。

因此,我们建议定期清理 Tomcat 服务器日志文件,保留最近一段时间内的日志信息即可。

清理日志的方法:- 在 Tomcat 安装目录下找到 logs 目录,删除过期的日志文件。

- 修改 Tomcat 的 logging.properties 配置文件,配置日志的输出级别和日志的保存周期。

可根据自身需求来设置级别和周期。

2. 优化 JVM 参数设置JVM 是 Java 虚拟机,是 Java 程序的核心组件之一。

Tomcat 服务器是运行在 JVM 上的 Java 应用程序,因此 JVM 参数的设置对Tomcat 服务器的性能和稳定性有很大影响。

我们建议对 JVM 参数进行优化设置,以提升 Tomcat 服务器的运行效率和稳定性。

优化 JVM 参数的方法:- 适当增加 JVM 堆空间大小。

在 Tomcat 安装目录下的 bin 目录中的 catalina.bat (Windows)/ catalina.sh (Linux)文件中可以找到 JVM 启动参数,增加 -Xms 和 -Xmx 参数来增加 JVM 堆空间大小。

- 设置内存溢出的报警机制。

内存溢出的原因有哪些怎么解决

内存溢出的原因有哪些怎么解决

内存溢出的原因有哪些怎么解决内存溢出是指程序在申请内存空间时,由于申请的内存超过了系统能够提供给该程序的最大内存限制,导致系统无法为该程序分配足够的内存空间,从而引发错误或崩溃的情况。

内存溢出的原因是多方面的,下面将介绍其中一些常见的原因以及解决方法。

1. 资源泄露:资源泄露是指程序在使用资源后没有进行正确的释放,导致这些资源一直占据着内存空间。

常见的资源包括文件句柄、数据库连接、网络连接等。

解决方法是在使用完资源后及时关闭或释放这些资源,可以使用try-finally或try-with-resources语句块来确保资源的正确关闭。

2.内存泄露:内存泄露是指程序中的对象不再被使用,但由于一些原因(如被遗忘的引用、缓存未清理等),这些对象占据了内存空间而无法被垃圾回收机制回收。

解决方法是通过合理的设计和追踪内存使用情况,及时释放不再使用的对象的引用,避免对象的循环依赖等问题。

3.递归调用:当一个方法在自身内部不断地调用自己,而没有递归终止条件,就会导致无限递归,并占用大量的内存空间。

解决方法是在递归方法内部设置递归终止条件,避免无限递归的发生。

4.大对象:当程序需要创建非常大的对象,而内存空间不足以容纳这个大对象时,就会导致内存溢出。

解决方法是将大对象分割成多个小对象,或者使用流式处理来逐步处理大对象。

5.内存泄露:如使用者创建循环的静态集合,存储了对象,然后使用完对象不进行移除,导致内存泄漏,这些创建出来的对象不能被GC回收6.使用过多的本地变量:在方法、循环体或代码快内定义大量的本地变量,或者创建了大型的数组,可能会导致栈溢出异常。

解决方法是减少本地变量的数量或者使用动态数据结构来管理数据。

7.过度使用递归:递归调用是一种常见的内存溢出问题,递归调用的深度过大,可能导致栈空间不足,从而引发栈溢出异常。

解决方法是优化递归算法,尽量将递归转换为迭代方式,或者通过增加栈空间的大小来解决。

对于内存溢出问题的解决方法,可以从以下几个方面入手:1.减少或释放无用的资源:清理不再使用的资源,避免资源泄露和内存泄露问题的发生。

内存溢出出现原因及解决方案

内存溢出出现原因及解决方案

内存溢出出现原因及解决方案篇一:内存溢出解决方案内存溢出解决方案篇二:内存溢出的三种情况及系统配置解决方案近经常有人咨询相关内存溢出的问题,在生产环境中tomcat内存设置不好很容易出现内存溢出。

造成内存原因是不一样的,当然处理方式也不一样。

这里根据平时遇到的情况和相关资料进行一个总结。

常见的一般会有下面三种情况:: Java heap space: PermGen space: unable to create new native thread.Tomcat内存溢出解决方案对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。

(-Xms -Xmx -XX:PermSize -XX:MaxPermSize)最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。

第一种:是堆溢出。

在JVM中如果98%的时间是用于GC且可用的 Heap size不足2%的时候将抛出此异常信息。

没有内存泄露的情况下,调整-Xms -Xmx参数可以解决。

-Xms:初始堆大小-Xmx:最大堆大小但堆的大小受下面三方面影响:1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在~2G;我在20XX server 系统下(物理内存:4G和6G,jdk:)测试 1612M,64为操作系统对内存无限制。

)2.系统的可用虚拟内存限制;3.系统的可用物理内存限制。

堆的大小可以使用 java -Xmx***M version 命令来测试。

支持的话会出现jdk的版本号,不支持会报错。

-Xms-Xmx一般配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m第二种:永久保存区域溢出PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。

这一部分用于存放Class和的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

内存溢出错误解决

内存溢出错误解决

ng.‎O utOfMemor‎y Error: Pe‎r mGen spac‎e及其解决方法‎PermGen s‎p ace的全称是Pe‎r manent Ge‎n eration s‎p ace,是指内存的‎永久保存区域OutO‎f MemoryErr‎o r: PermGe‎n space从表面‎上看就是内存益出,解‎决方法也一定是加大内‎存。

说说为什么会内存‎益出:这一部分用于存‎放Class和Met‎a的信息,Class‎在被Load的时候‎被放入PermGen‎space区域,它‎和和存放Instan‎c e的Heap区域不‎同,GC(Garba‎g e Collect‎i on)不会在主程序‎运行期对PermGe‎n space进行清‎理,所以如果你的AP‎P会LOAD 很多CL‎A SS的话,就很可能‎出现PermGen ‎s pace错误。

这种‎错误常见在web服务‎器对JSP 进行pre‎compile的时‎候。

改正方法:-Xm‎s256m -Xmx‎256m -XX:M‎a xNewSize=‎256m-XX:M‎a xPermSize‎=256m 2、在t‎o mcat中rede‎p loy时出现out‎o fmemory的错‎误. 可以有以下几个‎方面的原因:1‎,使用了proxoo‎l,因为proxoo‎l内部包含了一个老版‎本的cglib.‎2, log4j,‎最好不用,只用com‎m on-loggin‎g3, 老版本‎的cglib,快点更‎新到最新版。

4,‎更新到最新的hibe‎r nate3.2 3‎、这里以tom‎c at环境为例,其它‎W EB服务器如jbo‎s s,weblogi‎c等是同一个道理。

‎一、‎n g.OutOfMe‎m oryError:‎PermGen s‎p ace PermG‎e n space的全‎称是Permanen‎t Generati‎o n space,是‎指内存的永久保存区域‎,这块内存主要是被‎J VM存放Class‎和Meta信息的,C‎l ass在被Load‎e r时就会被放到Pe‎r mGen spac‎e中, 它和存放类实‎例(Instance‎)的Heap区域不同‎,GC(Garbag‎e Collecti‎o n)不会在主程序运‎行期对PermGe‎n space进行清‎理,所以如果你的应用‎中有很多CLASS的‎话,就很可能出现Pe‎r mGen spac‎e错误, 这种错误常‎见在web服务器对J‎S P进行pre co‎m pile的时候。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.T omcat内存溢出的三种情况及解决办法分析Tomcat内存溢出的原因在生产环境中tomcat内存设置不好很容易出现内存溢出。

造成内存原因是不一样的,当然处理方式也不一样。

这里根据平时遇到的情况和相关资料进行一个总结。

常见的一般会有下面三种情况:1.OutOfMemoryError:Java heap space2.OutOfMemoryError:PermGen space3.OutOfMemoryError:unable to create new native thread.Tomcat内存溢出解决方案对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。

(-Xms -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 和Tenured Generaion 之和。

在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx 值。

没有内存泄露的情况下,调整-Xms -Xmx参数可以解决。

-Xms:初始堆大小-Xmx:最大堆大小但堆的大小受下面三方面影响:1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试1612M,64为操作系统对内存无限制。

)2.系统的可用虚拟内存限制;3.系统的可用物理内存限制。

堆的大小可以使用java -Xmx***M version 命令来测试。

支持的话会出现jdk的版本号,不支持会报错。

-Xms -Xmx一般配置成一样比较好比如set JA V A_OPTS= -Xms1024m -Xmx1024m其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

可以利用JVM提供的-Xmn -Xms -Xmx 等选项可进行设置实例,以下给出1G内存环境下java jvm 的参数设置参考:JA V A_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "JA V A_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384m"CA TALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m-XX:NewSize=192m -XX:MaxNewSize=384m"服务器为1G内存:JA V A_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "服务器为64位、2G内存: JA V A_OPTS='-server -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'-------------------解决方案1:-----------------------------前提:是执行startup.bat启动tomcat的方式Linux服务器:在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh添加:JA V A_OPTS='-Xms512m -Xmx1024m'或者JA V A_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"或者CA TALINA_OPTS="-server -Xms256m -Xmx300m"Windows服务器:在catalina.bat最前面加入set JA V A_OPTS=-Xms128m -Xmx350m或者set CA TALINA_OPTS=-Xmx300M -Xms256M(区别是一个直接设置jvm内存,另一个设置tomcat内存,CA TALINA_OPTS似乎可以与JA V A_OPTS不加区别的使用)基本参数说明-client,-server这两个参数用于设置虚拟机使用何种运行模式,一定要作为第一个参数,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。

相反,server模式启动比client慢,但可获得更高的运行性能。

在windows上,缺省的虚拟机类型为client模式,如果要使用server模式,就需要在启动虚拟机时加-server参数,以获得更高性能,对服务器端应用,推荐采用server模式,尤其是多个CPU的系统。

在Linux,Solaris上缺省采用server模式。

此外,在多cup下,建议用server模式-Xms<size>设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为1024的整数倍并且要大于1MB,可用k(K)或m(M)为单位来设置较大的内存数。

初始堆大小为2MB。

加“m”说明是MB,否则就是KB了。

例如:-Xms6400K,-Xms256M-Xmx<size>设置虚拟机的最大可用大小,缺省单位为字节。

该值必须为1024整数倍,并且要大于2MB。

可用k(K)或m(M)为单位来设置较大的内存数。

缺省堆最大值为64MB。

例如:-Xmx81920K,-Xmx80M当应用程序申请了大内存运行时虚拟机抛出ng.OutOfMemoryError: Java heap space错误,就需要使用-Xmx 设置较大的可用内存堆。

PermSize/MaxPermSize:定义Perm段的尺寸,即永久保存区域的大小,PermSize为JVM启动时初始化Perm 的内存大小;MaxPermSize为最大可占用的Perm内存大小。

在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.-------------------解决方案2:------------------------前提:是执行startup.bat启动tomcat的方式手动设置Heap sizeWindows服务器:修改TOMCA T_HOME/bin/catalina.bat,在“echo "Using CA TALINA_BASE: $CA TALINA_BASE"”上面加入以下行:Java代码set JA V A_OPTS=%JA V A_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m注:JA V A_OPTS是保留先前设置。

Linux服务器:修改TOMCA T_HOME/bin/catalina.sh在“echo "Using CA TALINA_BASE: $CA TALINA_BASE"”上面加入以下行:JA V A_OPTS="$JA V A_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"注:$JA V A_OPTS是保留先前设置。

-------------------解决方案3:-----------------------------前提:是执行windows的系统服务启动tomcat的方式但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了, 就是说set JA V A_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions原值为-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"-Xrs加入-Xms300m -Xmx350m重起tomcat服务,设置生效-------------------解决方案4:-----------------------------前提:是执行windows的系统服务启动tomcat的方式在安裝tomcat時若有勾選"NT Service(NT/2000/XP only)"則安裝完成後在安裝目錄的"bin"目錄裡會有一個tomcat.exe的檔案先把tomcat的服務停掉在命令列模式下(运行里输入CMD)將目錄切換到tomcat的bin目錄用下面的命令把服務移除tomcat -uninstall "Apache Tomcat 4.1"接下來,写个批处理。

相关文档
最新文档