我就运行了 3个SSH项目运行不了多长时间,经常会报
javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space
已经把tomcat的内存设置为initial memory pool:500M
maximum memory pool:800M
了听说可以把项目公用的jar包放到tomcat的lib下
我曾尝试着将三个项目所有的包都移动到tomcat的lib下,tomcat 启动不了了 附带问以下  项目公用的jar包? 是指哪些呢?  诸如dwr?
jar包tomcat 加载有顺序的吧?  把struts hibernate spring 的jar  放进去可以不?
 

解决方案 »

  1.   

    项目公用的jar包? 是指哪些呢。
    3个ssh项目都存在的jar包呗,这么简单的问题。 java.lang.OutOfMemoryError: PermGen space内存溢出啦设置tomcat内存大家都知道,JAVA程序启动时都会JVM都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在一定程度都会影响程序的性能。比如说在应用程序用到最大内存的时候,JVM是要先去做垃圾回收的动作,释放被占用的一些内存。所以想调整Tomcat的启动时初始内存和最大内存就需要向JVM声明,一般的JAVA程序在运行都可以通过中-Xms -Xmx来调整应用程序的初始内存和最大内存: 如:java -Xms64m -Xmx128m a.jar.tomcat的启动程序是包装过的,不能直接使用java -X..... tomcat.*来改变内存的设置。在Tomcat在改变这个设置有两种方法:1. 就需要在环境变量中加上TOMCAT_OPTS, CATALINA_OPTS两个属性,如 SET CATALINA_OPTS= -Xms64m -Xmx512m;ms是最小的,mx是最大,64m, 512m分别是指内存的容量.2. 修改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% 中的%CATALINA_OPTS% 替换成-Xms64m -Xmx512m
      

  2.   

    800内存应该可以跑很多项目了,你如果在application加载的时候没有过多的使用cache 去占用内存 哪用得聊这么多内存 公用的jar放在common/lib项目的conn等要及时关闭释放资源 用到内存的地方多了 应该多检查项目运行期间都做什么了 比如大文件操作之类的
      

  3.   


    因为虚拟机多数都是分代的, heap分成了不同的代, 持久代弄多点应该就可以了. 据说spring这些会使用持久代多一些.
    http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/用一些内存检测工具jprofile, JDK自身的jconsole.exe等查一下什么类占用内存是否没释放等;不过一般你使用框架,内存泄露应该几率要小
      

  4.   


    tomcat6 压根儿就没有Catalina.bat 文件,又是copy
      

  5.   

    没有Catalina.bat 文件?
    \tomcat6\bin\catalina.bat没有???
      

  6.   


    没有 只有 bootstrap.jar
    tomcat6.exe
    tomcat6w.exe
    tomcat-juli.jar四个文件
      

  7.   

    解决方案:去掉所有的hibernate代码,改成ibatis
      

  8.   

    太狠了,hibernate难道这么难用么
      

  9.   


    ibatis推崇者顶之...lz可能用的win32的安装版吧,
    如果是win32安装版好像要调整注册表来修改内存大小了好像good luck
      

  10.   

    非堆内存泄漏。参考 1# 的方法啦,不一定是Catalina.bat ,在startup.bat 应该也可以设置的。自己在百度搜一下内存泄漏,大把参考文章。
      

  11.   

     java.lang.OutOfMemoryError内存泄漏问题,换UFO试试。