读书人

tomcat公布工程内存溢出请高手们进

发布时间: 2013-01-11 11:57:35 作者: rapoo

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"



请各位高手指点啊。。不然就没法工作了。。同事们跟我一样的环境也没出这个问题。请指点。
tomcat 内存溢出??
[解决办法]
看看这篇http://blog.csdn.net/lifetragedy/article/details/7708724
[解决办法]
正常的tomcat部署不会出现内存益处,有可能你在tomcat下面部署的工程过多,那些不用的工程都去掉;也有可能是你webroot下面粘贴了一些别的架库,看似导入的那些架库文件不大,有时候只有两三兆,但是经过tomcat部署之后,实际需要jvm的内存远远大于表面想的.如果是这样,就选择性的复制一些需要的文件,不用的东西不要copy进去
[解决办法]
设置MaxPermSize大小
TOMCAT_HOME/bin/catalina.bat 文件头加
set JAVA_OPTS='-Xms512m -Xmx1024m -XX:MaxPermSize=512m'

老问题
[解决办法]
以前我也有遇到过部署项目内存益处的情况,是因为在webroot下面直接粘贴了extjs库(3m左右),在部署的时候,查看到虚拟机的内存占用达到了500m,一般2g(4g)物理内存的jvm的最大内存只有512m(1g),在jvm可用内存少于最大内存的5%时,部署就发生内存益处.你把jvm内存监测的那个工具打开,查看一下部署项目时,jvm具体使用内存的大小.尽可能的关掉那些没必要的程序,在eclipse中保留当前项目,其他的全部delete

读书人网 >J2EE开发

热点推荐