首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OutOfMemoryError: PermGen空间

OutOfMemoryError: PermGen空间
EN

Stack Overflow用户
提问于 2013-03-20 04:28:34
回答 4查看 5.6K关注 0票数 2

我知道在这个问题上有很多问题和答案;我已经尝试了8到10种对其他人有效的不同方法,我觉得需要分析哪里出了问题,而不是反复试验。

我在Windows 64位机器上运行,Spring Tool Suite3.1,Jetty内部服务器。我正在运行一个web应用程序;它的初始屏幕出现后,我单击一个执行操作的链接,它将处理大约10秒钟,然后显示以下信息

代码语言:javascript
复制
HTTP ERROR 500
Problem accessing /corrserv/printRoom/printManagement.html;jsessionid=uroykwoyxr2y.     
Reason: 

PermGen space

Caused by:
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:386)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
at org.eclipse.jdt.internal.compiler.Compiler.<init>(Compiler.java:109)
at org.apache.jasper.compiler.JDTJavaCompiler.compile(JDTJavaCompiler.java:498)
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:368)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:437)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:608)
at org.apache.jasper.servlet.JspServletWrapper.loadTagFile(JspServletWrapper.java:261)
at org.apache.jasper.compiler.TagFileProcessor.loadTagFile(TagFileProcessor.java:683)
at org.apache.jasper.compiler.TagFileProcessor.access$000(TagFileProcessor.java:88)
at org.apache.jasper.compiler.TagFileProcessor$TagFileLoaderVisitor.visit(TagFileProcessor.java:739)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1501)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2291)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2341)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2347)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:498)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2291)
at org.apache.jasper.compiler.TagFileProcessor.loadTagFiles(TagFileProcessor.java:757)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:222)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:435)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:608)


--------------------------------------------------------------------------------
Powered by Jetty://

以下是我的STS.ini文件:

代码语言:javascript
复制
-vm
C:/Program Files (x86)/Java/jdk1.6.0_43/bin/javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120522-1813
-product
org.springsource.sts.ide
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512m
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms256m
-Xmx512m
-XX:MaxPermSize=512m

对于最后三个值,我尝试了很多方法。我放入了123456789m,以确保STS读取这个特定的文件(它不会以该值开头)。我只运行了一个web应用程序。我以前也有-XX:PermSize,我很乐意再试一次。不幸的是,我不知道它们是如何相互作用的,只知道它们的基本含义。

我希望得到一些关于如何解决这个问题的指导,或者至少是如何攻击它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-23 03:18:42

这可以通过查看JDK的版本(位版本)来解决。例如使用64位JDK版本的32位应用程序。更改为正确的JDK版本和正确的JRE。

票数 4
EN

Stack Overflow用户

发布于 2013-03-20 04:32:49

问题似乎出在jsp本身。我猜它是在用类填充PermGen。你能发布jsp代码吗?

增加内存并不是解决这个问题的办法。有一些东西填满了它,你需要找到它。

票数 2
EN

Stack Overflow用户

发布于 2013-03-20 04:37:24

1)将MaxPermSize限制在512m可能不是一个好主意。我肯定会把它拿出来。

2)考虑增加-Xmx也无伤大雅。

3)这里有一些很好的链接:

4)最重要的事情是在你的应用程序运行时分析它,看看你是否能找出到底是什么在消耗你的PermGen。以下是一些选项:

Eclipse(如果您使用的是):http://www.eclipse.org/mat/

  • JVisualVM:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15509781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档