[〜#〜] background [〜#〜]:JSPを使用するWebプロジェクトがあります。 IDEはEclipseです。Tomcatの構成は次のとおりです。
一部の設定を保存するために使用されたクラスフォルダー内のプロパティファイル。サーブレットによって動的に変更することもできます。変更操作は、JSPの[保存]ボタンによってトリガーされます。
[〜#〜] problem [〜#〜]:いくつかの保存操作の後、TomcatにはJava.lang.OutOfMemoryError: PermGen space
。
ログメッセージ
Java.lang.OutOfMemoryError: PermGen space
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClassCond(ClassLoader.Java:632)
at Java.lang.ClassLoader.defineClass(ClassLoader.Java:616)
at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:141)
at org.Apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.Java:1815)
at org.Apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.Java:872)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1325)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1204)
at org.Apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.Java:108)
at org.Apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.Java:58)
at org.Apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.Java:297)
at org.Apache.catalina.startup.ContextConfig.start(ContextConfig.Java:1064)
at org.Apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.Java:261)
at org.Apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.Java:120)
at org.Apache.catalina.core.StandardContext.start(StandardContext.Java:4238)
at org.Apache.catalina.core.StandardContext.reload(StandardContext.Java:3083)
at org.Apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.Java:404)
at org.Apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.Java:1279)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.Java:1571)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.Java:1580)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.Java:1580)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.Java:1560)
at Java.lang.Thread.run(Thread.Java:662)
Tomcatには多くのpermgenが必要です。 512mは不合理な最大値ではありません。ただし、ホットデプロイリークを遅らせるだけです。 Permgenはhotdeployごとに〜25MB増加します。これは、Eclipseでは、Javaファイルを保存するたびに発生します。私のようなCtrl + S Twitchがある場合、512mは速く消えます。
解決策:allow Javaは、クラス定義をメモリから追い出す、つまりガベージコレクションバイトコードです。これらを追加されたpermgenサイズと共に追加します。
-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
次の名前の環境変数を設定できます: "Java_OPTS
"と次のように値を設定します-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
for Eclipse
NETBEANSの場合
netbeans_default_options = "-J-client -J-Xss256m -J-Xms256m -J-XX:PermSize = 256m -XX:MaxPermSize = 512m -J-Dapple.laf.useScreenMenuBar = true -J-Dapple .awt.graphics.UseQuartz = true -J-Dsun.Java2d.noddraw = true -J-Dsun.Java2d.dpiaware = true -J-Dsun.Zip.disableMemoryMapping = true "
それで全部です
このような設定:
-Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m
誰かがまだ立ち往生している場合は、Windowsに追加するだけです。
非常に最初にJava_OPTSを次のように設定します(実際にファイルのどこかで最初に使用する前に):-
set Java_OPTS = -Dfile.encoding = UTF-8 -Xms128m -Xmx1024m -XX:PermSize = 64m -XX:MaxPermSize = 256m
Tomcatを再起動して完了しました。
素敵な説明を見つけることができます こちら
Tomcatサーバーは異なるJavaを実行し、Eclipseは異なるJavaで実行されます。
したがって、-XX:MaxPermSize=512m
をEclipse.ini
に追加すると、この問題の解決に役立ちます。以下の手順に従って、これをTomcatサーバーに追加します。
Eclipseのサーバーをダブルクリック
起動設定を開く
「-XX:MaxPermSize = 512m」をVM引数タブの引数に追加します。