Code Bye

tomcat发布工程,内存溢出

前提条件
tomcat7
jdk7
发布到tomcat7的webapp 大小 250M
已经试过的办法,配置tomcat的内存参数没用,配置JDK的内存参数没用,配置Myeclipse的内存参数没用。
核心错误信息如下
Caused by: java.lang.RuntimeException: by java.lang.OutOfMemoryError: PermGen space
at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:509)
at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)
at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:163)
… 108 more
Caused by: javassist.CannotCompileException: by java.lang.OutOfMemoryError: PermGen space
at javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:169)
at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:501)
… 112 more
Caused by: java.lang.OutOfMemoryError: PermGen space

一月 06, 2013 8:11:07 上午 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Common\Tomcat7\webapps\docs
一月 06, 2013 8:11:07 上午 org.apache.catalina.startup.HostConfig deployDirectories
SEVERE: Error waiting for multi-thread deployment of directories to completehostConfig.deployWar=Deploying web application archive {0}
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1037)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:479)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1402)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.OutOfMemoryError: PermGen space

一月 06, 2013 8:11:08 上午 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Common\Tomcat7\webapps\examples
一月 06, 2013 8:11:08 上午 org.apache.catalina.startup.HostConfig deployDirectories
SEVERE: Error waiting for multi-thread deployment of directories to completehostConfig.deployWar=Deploying web application archive {0}
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1037)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:479)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1402)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.OutOfMemoryError: PermGen space

一月 06, 2013 8:11:09 上午 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Common\Tomcat7\webapps\ROOT
一月 06, 2013 8:11:09 上午 org.apache.catalina.startup.HostConfig deployDirectories
SEVERE: Error waiting for multi-thread deployment of directories to completehostConfig.deployWar=Deploying web application archive {0}
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1037)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:479)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1402)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.OutOfMemoryError: PermGen space

一月 06, 2013 8:11:10 上午 org.apache.catalina.startup.HostConfig deployDirectories
SEVERE: Error waiting for multi-thread deployment of directories to completehostConfig.deployWar=Deploying web application archive {0}
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1037)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:479)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1402)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.OutOfMemoryError: PermGen space

Exception in thread “main” 
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread “main”

请各位高手指点啊。。不然就没法工作了。。同事们跟我一样的环境也没出这个问题。请指点。


50分
看看这篇http://blog.csdn.net/lifetragedy/article/details/7708724
申请加内存。。。
引用 2 楼 hucp2007 的回复:

申请加内存。。。

在哪里申请加? 加配置启动参数?  试过了没用

你真实的物理内存  内存不足, 把你占内存多的 程序进程全kill 掉

10分
正常的tomcat部署不会出现内存益处,有可能你在tomcat下面部署的工程过多,那些不用的工程都去掉;也有可能是你webroot下面粘贴了一些别的架库,看似导入的那些架库文件不大,有时候只有两三兆,但是经过tomcat部署之后,实际需要jvm的内存远远大于表面想的.如果是这样,就选择性的复制一些需要的文件,不用的东西不要copy进去
加内存
引用 5 楼 yujian10962 的回复:

正常的tomcat部署不会出现内存益处,有可能你在tomcat下面部署的工程过多,那些不用的工程都去掉;也有可能是你webroot下面粘贴了一些别的架库,看似导入的那些架库文件不大,有时候只有两三兆,但是经过tomcat部署之后,实际需要jvm的内存远远大于表面想的.如果是这样,就选择性的复制一些需要的文件,不用的东西不要copy进去

+1

如果同事的没问题,你就所有的都照同事的配就完了


10分
设置MaxPermSize大小
TOMCAT_HOME/bin/catalina.bat 文件头加
set JAVA_OPTS=””-Xms512m -Xmx1024m -XX:MaxPermSize=512m””

老问题

引用 5 楼 yujian10962 的回复:

正常的tomcat部署不会出现内存益处,有可能你在tomcat下面部署的工程过多,那些不用的工程都去掉;也有可能是你webroot下面粘贴了一些别的架库,看似导入的那些架库文件不大,有时候只有两三兆,但是经过tomcat部署之后,实际需要jvm的内存远远大于表面想的.如果是这样,就选择性的复制一些需要的文件,不用的东西不要copy进去

因为是maven管理的项目。。依赖项目很多。。而且都是必须要部署的。。。至于你说的粘贴了一些别的架库应该没有。。。。

引用 8 楼 brightyq 的回复:

设置MaxPermSize大小
TOMCAT_HOME/bin/catalina.bat 文件头加
set JAVA_OPTS=””-Xms512m -Xmx1024m -XX:MaxPermSize=512m””

老问题

就是因为这样不行。。加所谓的内存启动参数不行。没用。。。

引用 6 楼 fatg1988 的回复:

加内存

 我4G内存啊。。


30分
以前我也有遇到过部署项目内存益处的情况,是因为在webroot下面直接粘贴了extjs库(3m左右),在部署的时候,查看到虚拟机的内存占用达到了500m,一般2g(4g)物理内存的jvm的最大内存只有512m(1g),在jvm可用内存少于最大内存的5%时,部署就发生内存益处.你把jvm内存监测的那个工具打开,查看一下部署项目时,jvm具体使用内存的大小.尽可能的关掉那些没必要的程序,在eclipse中保留当前项目,其他的全部delete
我综合了以上意见。。。。解决了问题。。还有核心的一点就是。。。。不用Myeclipse启动肥猫。。而用doc命令行启动。。。。。。。
如果用的是maven的tomcat插件,应该怎么修改tomcat的内存?
这个问题解决了麽。我也配置了这个内存大小。启动启不了。我现在遇到是这样的问题。
我在服务器2008系统下面启动两个tomcat7 web同一个项目
运行一会报内存溢出,强制的把其中一个tomcat7关闭了。
我配置内存大小,为什么启动不了tomcat了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明tomcat发布工程,内存溢出