web-dev-qa-db-ja.com

Tomcat PermGenスペースをどうするか

[〜#〜] 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)
26
SKing7

Tomcatには多くのpermgenが必要です。 512mは不合理な最大値ではありません。ただし、ホットデプロイリークを遅らせるだけです。 Permgenはhotdeployごとに〜25MB増加します。これは、Eclipseでは、Javaファイルを保存するたびに発生します。私のようなCtrl + S Twitchがある場合、512mは速く消えます。

解決策:allow Javaは、クラス定義をメモリから追い出す、つまりガベージコレクションバイトコードです。これらを追加されたpermgenサイズと共に追加します。

-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
34
Scott Linford

次の名前の環境変数を設定できます: "Java_OPTS "と次のように値を設定します-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

13
Sourav Bairagi

for Eclipse

  1. サーバーのプロパティに移動
  2. プラットフォームに移動
  3. 今VM引数にこれを書く-Xms256m -Xmx256m -XX:PermSize = 256m -XX:MaxPermSize = 512m

NETBEANSの場合

  1. Netbeansフォルダー/ etc /に移動します
  2. 任意のエディターでnetbeans.configを開きます
  3. この行を次のように編集します

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 "

それで全部です

6

このような設定:

-Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m

enter image description here

5
Do Nhu Vy

Apache Tomcatインターフェースから設定するだけです:

  1. c:\ Program Files\Apache Software Foundation\Tomcat 8.5\bin\Tomcat8w.exeを起動します(または、Windowsで「Tomcatの構成」を検索するだけで検索できます)。
  2. Javaタブ;
  3. 入力フィールドに必要なスペースを設定します。 enter image description here
2
BabaNew

誰かがまだ立ち往生している場合は、Windowsに追加するだけです。

  1. Catalina.batファイルを開きます(Apache Tomcatインストールフォルダー/ binにあります)
  2. 非常に最初にJava_OPTSを次のように設定します(実際にファイルのどこかで最初に使用する前に):-

    set Java_OPTS = -Dfile.encoding = UTF-8 -Xms128m -Xmx1024m -XX:PermSize = 64m -XX:MaxPermSize = 256m

  3. Tomcatを再起動して完了しました。

素敵な説明を見つけることができます こちら

1
Nicks

Tomcatサーバーは異なるJavaを実行し、Eclipseは異なるJavaで実行されます。

したがって、-XX:MaxPermSize=512mEclipse.iniに追加すると、この問題の解決に役立ちます。以下の手順に従って、これをTomcatサーバーに追加します。

  • Eclipseのサーバーをダブルクリック

  • 起動設定を開く

  • 「-XX:MaxPermSize = 512m」をVM引数タブの引数に追加します。

0
Purushothaman