每个人
当我运行服务器时出现异常,我认为这是内存泄漏!
我尝试了很多参数JAVA_OPS的值,但仍然有异常!!!
在控制台中我得到了这个例外,你可以看到如下!
Nov 18, 2013 2:48:48 PM org.apache.catalina.startup.HostConfig deployDescriptors
SEVERE: Error waiting for multi-thread deployment of context descriptors to complete
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:578)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1401)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:317)
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(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError: PermGen space
Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
答案 0 :(得分:3)
指定您已经尝试过的“多个值”总是有意义的。
首先:他们需要JAVA_OPTS
,但这也可能是这个问题中的错字。但是,使用CATALINA_OPTS
甚至更好。
最重要的是,当存在PermGen错误时,-Xmx
根本没有帮助。您想要设置-XX:MaxPermSize=256m
(或其他一些内存量)。您只需查看错误消息即可找到有关此问题的大量信息 - PermGen是Sun / Oracle JVM使用的特定内存区域。增加可用的堆内存根本没有帮助。
答案 1 :(得分:2)
我发现这也发生在另一个Java Application Server GlassFish上。通常,我们必须重新启动Application Server以释放Application Server使用的所有内存和资源。大多数Java应用程序服务器,如GlassFish和Tomcat,都可能非常耗费内存。您可能希望将以下行添加到catalina.sh文件(或其他catalina配置文件)中以更改JVM参数,这可能会增加内存分配:
export CATALINA_OPTS="-Xms512M -Xmx1024M"
答案 2 :(得分:2)
通过分析原因来增加记忆力的重点是什么。我建议尝试使用一些分析工具(JProfiler,YourToolkKit)来捕捉问题。
一旦你对导致问题的原因有所了解,你就可以努力(例如:开放连接,未封闭的流等)
祝你好运。答案 3 :(得分:2)
在Linux中,将以下行添加到位于path_to_tomcat / bin中的catalina.sh
。
CLASSPATH=
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi
在那之后,您应该创建setenv.sh
(如果bin中不存在)
如果您位于path_to_tomcat / bin
vi ./setenv.sh
并添加跟随线
export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
现在重新启动tomcat,您的问题已经结束...
答案 4 :(得分:0)
在linux中,创建一个setenv.sh文件并将文件保存在tomcat/bin
文件夹中。
在文件中添加以下行并保存。
export CATALINA_OPTS =" $ CATALINA_OPTS -server -Xms256m -Xmx1024m -XX:PermSize = 512m -XX:MaxPermSize = 512m"
现在重启tomcat,你可以去.. !!
答案 5 :(得分:0)
您必须在tomcat服务器VM参数中设置XX:MaxPermSize,如下所示:
根据您在本地系统上的内存,您可以修改:
双击服务器转到 打开启动配置
在vm参数中 把这一行
-XX:MaxPermSize参数=2048米
现在重启tomcat