問題タブ [permgen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - PermGen 空間で単一の Java クラス定義のサイズを決定しますか?
単一の特定のクラス定義 (インスタンス化されたオブジェクトではない) の大きさを確認するにはどうすればよいですか? 具体的には、特定のクラスが使用する PermGen メモリの量は? 計算できない場合、圧縮されていない .class ファイルのファイルシステム サイズにどの程度対応していますか?
PermGen が保持するものについて、Jon Masamitsuを読みました。
- Java クラスの基本フィールド
- クラスのメソッド (バイトコードを含む)
- クラスの名前 (永久世代でも文字列を指すオブジェクトの形式で)
- 定数プール情報 (クラス ファイルから読み込まれたデータ。詳細については、JVM 仕様の第 4 章を参照してください)。
- クラスに関連付けられたオブジェクト配列と型配列 (メソッドへの参照を含むオブジェクト配列など)。
- JVM によって作成された内部オブジェクト (java/lang/Object または java/lang/exception など)
- コンパイラーによる最適化に使用される情報 (JIT)
最後の 2 つは、個々のクラス定義に関連しない可能性があります。私は残りに興味があります。
私が見つけた唯一の可能な近似値はjava.lang.instrument.Instrument.getObjectSize(myObject.getClass()); です。しかし、説明の「一部またはすべて」では、正確さに自信が持てません。何か案は?シンプルなものを見落としているような気がします。
java - Jetty 7 で再デプロイする際の PermGen の問題を解決する
数日間のデバッグの後、中規模から大規模の Web アプリケーションをリークなしで Tomcat 6.0.32 に正常に再デプロイすることができPermGen
ました。いっぱいになった後にドロップが見られPermGen
、クラスローダーがガベージコレクションされました。
大喜びした後、Maven と Jetty プラグインで構成される開発環境で、アプリケーションをリークなく再デプロイできるようにしました。
残念ながら、以下のスクリーンショットに示すように、サーバーの制限に達したようです
あなたのキットのスナップショット http://img811.imageshack.us/img811/7320/jettyclassloaderbeanelr.png
Jetty リクエスト スレッドにはBeanElResolver
、Web アプリケーションから複数のクラスへの強い参照がある への強い参照があります。
この情報をフラッシュする方法についての参照は見つかりませんでした。
PermGen
この最後のリークをアプリケーションから削除するにはどうすればよいですか?
アップデート:
問題を解決するために次のことを行いましたが、うまくいきませんでした。
- Jetty プラグインの最新バージョン (7.4.5 と 8.0.0.M3 の両方) に更新されました。
- CMSコレクターを使用しました:
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
更新 2:
- これは、Jetty イシュー トラッカーのバグとして報告しました: maven-jetty-plugin: PermGen リークによる javax.el.BeanELResolver
memory-leaks - Jetty 7:OutOfMemoryError:アプリケーションの再デプロイ時のPermGenスペース
初めてのアプリは正しく起動します。次に、webapp / *。warファイルを削除し、新しいバージョンの*.warを貼り付けます。Jettyは新しい戦争の展開を開始しますが、エラーjava.lang.OutOfMemoryError: PermGen space
が発生します。エラーを修正/正しく再デプロイするようにJettyを構成するにはどうすればよいですか?
この解決策は私を助けません。
Jettyバージョン:jetty-7.4.3.v20110701
scala - パーマ生成スペースに対するScalaクラス定義の影響
Scalaクラスライブラリで使用される標準パターンは、クラスとトレイト内のクラスの定義です。また、親クラスのオブジェクトの操作のほとんどは、それらの内部クラスのオブジェクトが作成される結果になります。各内部クラスは、オブジェクトごとに異なります。
例:scala.io.SourceおよびLineIteratorのソースを参照してください。これは標準ライブラリの中で最も単純なものだと思います。
ドキュメントが示唆するように、以下は2つの異なるクラスです。
つまり、2つのクラスが作成されます。
コレクションライブラリ全体が同じパターンを使用しているため、長時間実行されるプロセスのpermgenスペースにどのような影響がありますか?
tomcat - Intellij / Grails開発では、PermGenエラーを回避するために何を設定しますか?
IntelliJを使用してGrailsアプリケーションを開発していますが、アプリケーションが大きくなるにつれて、Tomcatプラグインを使用するとPermgenエラーが発生します。permgenサイズの設定でいくつかの組み合わせを試しましたが、効果がないようです。
これらのPermgenエラーに対処するための解決策はありますか?
coldfusion - Coldfusion TemplateClassLoaderは、クラスローダーインスタンスを保持しますか?
CF 8サーバーで「OutOfMemoryError:PermGenspace」エラーが発生しました。私のアプリでは、1000個のテンプレートが(テスト目的で)同じローカル変数にロードされたため、次のテンプレートがロードされると、前のテンプレートがGCで使用できるようになりますが、これは発生しません。メモリダンプを取得し、jhatで確認しました。私が見たのは、それぞれが独自のTemplateClassLoaderインスタンスを持つ数千のテンプレートをロードすることでした。TemplateClassLoader自体には、すべてのTemplateClassLoaderインスタンスへの静的参照があります(これもjhatからのものです)。おそらくこれが原因で、インスタンスはメモリに保持されているため、クラスオブジェクトをpermgenでGCにすることはできません。
この「メモリの保持」は、ロードされた後にテンプレートでcfscript関数を呼び出した場合にのみ発生します。テンプレートをロードしただけで関数を呼び出さなかった場合、クラスオブジェクトはGCされ、OOMエラーは発生しません。
TemplateClassLoaderの(表示された)静的参照で何が起こっているのか考えてみてください。
java - 複数のクラスローダーでPermGenスペースを節約
多くのクラスを含む大規模なGUIアプリをScalaで作成しており、すべてのクラスをロードできるようにするには、PermGenスペースを増やす必要がありました。アプリ自体は一連の画面ベースのアクティビティを表示し、各アクティビティは独自の大きなクラスのセットをロードします。どの時点でも、1つのアクティビティのみがロード/表示されます。いくつかの活動を経た後、私たちはOutOfMemoryError
PermGenスペースにいました。
PermGenスペースはヒープの他の部分と同じようにガベージコレクションさClassLoader
れることを理解していますが、クラスのアンロードを可能にするために、たとえばアクティビティごとに1つ持つことで、必要なPermGenスペースを減らすことができるかどうかを確認したいと思います。
それで:
- システムClassLoaderによってロードされたクラスは、クラスローダーによって永久に参照されるため、アンロードできないことを理解しています。本当?
- カスタムクラスローダーによってロードされたクラスのインスタンスがもう存在せず、クラスローダーをガベージコレクションできる場合、そのクラスはアンロードされ、PermGenスペースが解放されますか?
- クラスのアンロードに関する警告(またはそれを妨げる一般的な間違い)はありますか?
java - perm genはいつ収集されますか?
CMSコレクターとメモリバーを使用してGCをトリガーするTomcatアプリケーションに取り組んでいます。Webアプリをリロードすると、古い世代がGCをトリガーするのに十分な量であるのに、死んだクラスローダーが収集されないという状況に陥ることがあります。
クラスがpermgenに割り当てられていることを読み、したがって、それらはOldgenコレクションによって無視されていたと推測しました。この理論をテストするために、次のテストクラスを作成しました。
このクラスを実行し、VisualVMを使用して出力を監視したところ、デッドクラスローダーが収集されずに複数のOldおよびYoung genコレクションが実際に発生しているため、大きなバイト配列がメモリに残っていることがわかりました。
Perm Genが収集されるきっかけは何ですか?
memory - NB から起動した NetBeans プラグインの vm メモリを増やす方法
それを行う方法に関する情報を見つけることができませんでした。NetBeans 自体のメモリ設定を増やすには/Applications/NetBeans/NetBeans 7.0.1.app/Contents/Resources/NetBeans/etc/netbeans.conf
、Mac を更新する必要があります。
ただし、NetBeans からプラグインを実行するときに開始される vm プロセスのメモリ設定を増やしたいと考えています。メモリを増やすことなく、UI で遊んで約 30 秒で java.lang.OutOfMemoryError: PermGen space を実行しています。この状況は私の Mac でのみ発生し、Windows 7 ではその問題はありません :)
私のプラットフォームは: Java バージョン "1.6.0_26" Java(TM) SE ランタイム環境 (ビルド 1.6.0_26-b03-384-10M3425) Java HotSpot(TM) 64 ビット サーバー VM (ビルド 20.1-b02-384、混合モード) ) MacOS 10.6.8 NetBeans 7.0.1
どんな助けにも感謝します!
c# - .NETにはJavaのpermgenのようなものがありますか?
だから私はかなり標準的な春、休止状態、Tomcat環境を持っています..それでも私はローカルとCIでpermgensを取得しています。
一時的な修正(つまり、permgenに割り当てられたメモリの増加)があることは知っていますが、これはまだ一時的なものです。私が見ているものを考えると、本番環境がどのように見えるかは想像したくありません。
(ちょっとした比較の質問).NETでは、似たようなものは見たことがありません。.NETにはそのバージョンのpermgenがありますか?
(どのpermgenがPermGenスペースの重要性であるかわからない場合)