gpt4 book ai didi

java.lang.OutOfMemoryError : PermGen space after convering project to Maven 错误

转载 作者:行者123 更新时间:2023-11-30 11:16:47 26 4
gpt4 key购买 nike

关于这个主题有几个问题,我仔细阅读了所有答案,但我仍然遇到同样的问题。我正在尝试在以前未使用 spring 的现有项目上实现 spring security。我成功转换为maven项目并添加了登录表单,没有任何问题。我继续进行更多更改,当天离开,下一次回来,tomcat 开始抛出此错误。我尝试回滚我所做的更改,但没有任何改变,直到我禁用了项目的 Maven 性质。一旦我这样做,错误就消失了,一旦我配置为 maven 项目,错误就会返回。

我已按照其他堆栈溢出答案中的建议尝试了以下操作:

  • 在环境变量中添加一个_JAVA_OPTIONS -Xmx1024m 用户变量
  • 在环境变量中添加 MAVEN_OPTS -Xmx1024m 用户变量
  • 在 eclipse.ini 中的 -vmargs 之后添加 -XX:MaxPermSize=128M 和 -XX:PermSize=128M
  • 将 Java_OPTS 设置为 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
  • 将 -Xmx512m 添加到我的 POM
  • 将 -XX:MaxPermSize=512m 和 -XX:PermSize=512m 添加到我的 Tomcat 启动配置

最初 Perm Generation 是 99%,但是在将 -XX:PermSize=128M 添加到 eclipse.ini 后,百分比下降了很多,但这个问题仍然存在

提前致谢!此时任何建议都会有所帮助。

enter image description here

我要么得到两个错误中的一个,这两个错误只是堆栈跟踪不同而已。

java.lang.OutOfMemoryError: PermGen space
Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
at java.lang.Throwable.getStackTraceElement(Native Method)
at java.lang.Throwable.getOurStackTrace(Throwable.java:591)
at java.lang.Throwable.printStackTrace(Throwable.java:462)
at java.lang.Throwable.printStackTrace(Throwable.java:451)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)

java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1956)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1919)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1806)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1765)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1751)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1255)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:882)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:317)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5081)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.startup.Catalina.start(Catalina.java:620)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

更新:正如评论中所建议的那样,这似乎确切地表明了问题所在。 Perm Gen 完全显示为完整。这和 jmap(另一张图片)显示的有什么区别?一个说 16MB,满了,另一个说 128MB,还有剩余空间。如何增加这张图片中的Perm Gen?

enter image description here

enter image description here

最佳答案

我相信您正在使用 m2e 插件。如果您使用 m2e 执行 maven proess,它将启动一个单独的 jvm。您需要为该进程配置 VM 参数。请参阅下面的屏幕截图。在应用到您的项目之前,您可以先尝试一个简单的 maven 项目。

示例 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
  1. 配置 Maven 目标。确保选择项目工作区并正确设置 Maven 目标。如果你正在使用 tomcat7 插件,你应该使用 tomcat7:run maven goal
  2. 配置 VM 参数。示例:-Xmx1024m -Xms1024m -XX:MaxPermSize=512m -XX:PermSize=256m enter image description here
  3. 检查您使用 JVisualVM 设置的 JVM 参数。选择流程并从概览选项卡中获取它。示例截图如下。 enter image description here

关于java.lang.OutOfMemoryError : PermGen space after convering project to Maven 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com