java - 内存不足错误,permgen,从 java 8 到 java 7

标签 java tomcat catalina intellij-13

我收到与 permgen 相关的内存不足错误。

INFO: Deploying web application archive /usr/local/apache-tomcat-7.0.50/webapps/web.war
Jul 09, 2014 2:26:35 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart

Jul 09, 2014 2:26:35 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/web] startup failed due to previous errors
Jul 09, 2014 2:26:36 PM org.apache.catalina.startup.HostConfig deployWARs
SEVERE: Error waiting for multi-thread deployment of WAR files to complete
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:812)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:489)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1592)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:331)
    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:801)
    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.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.OutOfMemoryError: PermGen space
    at java.util.concurrent.ConcurrentHashMap$Values.iterator(ConcurrentHashMap.java:1449)
    at java.util.AbstractCollection.toArray(AbstractCollection.java:179)
    at org.apache.catalina.session.ManagerBase.findSessions(ManagerBase.java:707)
    at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:525)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5643)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:634)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1074)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    ... 4 more

Jul 09, 2014 2:26:36 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:690)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1130)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1592)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:331)
    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:801)
    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.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

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

这是我在 setenv.sh 中的 JAVA_OPTS 变量。

导出 JAVA_OPTS="-Xms1g -Xmx2g -XX:MaxPermSize=2g"

如果我从 intellij 运行 tomcat(使用相同的选项),它工作正常并且我的 web war 部署。运行

catalina.sh jpda 从命令行启动给我这个错误。

使用 JRE_HOME:/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home

`

我最近有 jdk1.8,然后使用此链接中的答案将其删除。

Removing Java 8 from Mac

$ java -version
Java 版本“1.7.0_60” Java(TM) SE 运行时环境(build 1.7.0_60-b19) Java HotSpot(TM) 64 位服务器 VM(构建 24.60-b09,混合模式)

» 回显 $JAVA_HOME /图书馆/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre

如有任何帮助,我们将不胜感激。

最佳答案

JAVA_OPTS 在外部(不是通过 IDE)启动它时未设置

尝试设置JAVA_OPTS

export JAVA_OPTS="-Xms1g -Xmx2g -XX:MaxPermSize=2g"

在从命令行启动服务器之前,如果它有效,则在 ~/.bash_profile 中添加此导出语句

关于java - 内存不足错误,permgen,从 java 8 到 java 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664195/

相关文章:

java - 来自 Java 问题的映射接口(interface)

java - 无法填充 ListView 未调用 getView

spring - 我如何将应用程序从 Tomcat 6.0.35 迁移到 JBoss AS 7.1.1

tomcat - 在 tomcat catalina.properties [Kubernetes] 中注入(inject)环境变量

eclipse - 无法为tomcat设置属性

java - 为什么我在索引 = -2147483648 (= Integer.MIN_VALUE) 处收到 IndexOutOfBoundsException?

tomcat - 请求登陆 Tomcat 的 catch-all 而不是所需的主机

java - 如果我使用 Java 8 库编写应用程序代码并尝试使用 Java 6 编译器编译它,构建是否会/应该失败?

java - Centos 7 apache httpd无法加载weblogic插件库