2

私はこの問題に関して多くのSOの質問と回答があることを知っています。私は他の人のために働く8つまたは10の異なることを試しましたが、試行錯誤ではなく、何が悪いのかを分析する必要があると感じています。

Windows 64ビットマシン、Spring Tool Suite 3.1、Jetty内部サーバーで実行しています。私は1つのWebアプリケーションを実行しています。最初の画面が表示されます。操作を実行するリンクをクリックすると、おそらく10秒間処理され、次のように表示されます。

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ファイルです。

-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

私は最後の3つの値について多くのことを試みました。STSがこの特定のファイルを確実に読み取るために123456789mを挿入しました(その値で開始されません)。私は1つのWebアプリケーションのみを実行しています。以前は-XX:PermSizeも使用していましたが、もう一度試してみてください。これらがどのように相互作用するのかわからないのは残念です。それらの基本的な意味のみ。

これを解決する方法、または少なくともそれを攻撃する方法についてのガイダンスをいただければ幸いです。

4

4 に答える 4

4

これは、JDK のバージョン (ビット版) を確認することで解決できます。64 ビット JDK バージョンを使用する 32 ビット アプリケーションのように。正しい JDK バージョンと正しい JRE に変更します。

于 2013-03-22T19:18:41.907 に答える
2

問題は jsp 自体にあるようです。PermGen がクラスでいっぱいになっていると思います。jspコードを投稿できますか?

メモリを追加しても、これは解決しません。それを満たす何かがあり、あなたはそれを見つける必要があります。

于 2013-03-19T20:32:48.813 に答える
1

たぶん私は間違っていますが、問題はJasperの誤った使用に関連しているようです... OutOfMemoryErrorへの受け入れられたresoneを調査しましたか:PermGen Space-Tomcatで実行されているSpringを使用したJasperレポート

于 2013-03-19T21:03:17.483 に答える
1

1) MaxPermSize を 512m に制限することは、おそらく良い考えではありません。私は間違いなくそれを取り出します。

2) -Xmxを増やしても問題ありません。

3)ここにいくつかの良いリンクがあります:

4) 最も重要なことは、実行中のアプリをプロファイリングして、PermGen を消費しているものを正確に把握できるかどうかを確認することです。以下にいくつかのオプションを示します。

于 2013-03-19T20:37:24.030 に答える