問題タブ [metaspace]
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 - MaxPermSize と MaxMetaspaceSize
PermGen と Metaspace の違いについて読んでいますが、前者の欠点の 1 つは、起動時に固定サイズがあることです。調整するパラメーターが 2 つあるのに、なぜ修正されるのかわかりません。
Metaspace についても同じことが言えるように思えます。MaxMetspaceSize によって起動時に修正されることもあります (デフォルトでは無制限であることはわかっていますが、そのままにしておくことはお勧めできません)。
私は何か誤解していますか?MaxPermSize と MaxMetaspaceSize の違いは何ですか?
java-8 - メモリ不足: Java 8 のメタスペース
私の製品には 256 MB の RAM が搭載されています。Java 6 を Java 8 にアップグレードしました。その後、Java 8 でメモリ関連の問題に直面し始めました。Java 8 を使用すると、メモリ消費量が増加します。同じコードを使用すると、Java 6 でメモリ消費量が安定します。メタスペース、java8 に関して多くを調査しました。メタスペースパラメーターの下にあります。
以下の組み合わせを試してみましたが、メモリ不足エラーが発生しました
1.MaxMetaspaceSize 50M MaxMetaspaceFreeRatio 60M MinMetaspaceFreeRatio 50M
2.MaxMetaspaceSize 30M
3.MaxMetaspaceSize 40M
4.MaxMetaspaceSize 50M
5.MaxMetaspaceSize 80M
しかし、2 ~ 3 時間後、メモリ不足のメタスペース エラーが発生しました。
誰かがメタスペース オプション MaxMetaspaceSize、MaxMetaspaceFreeRatio、MinMetaspaceFreeRatio とは何かを説明できますか?
適切なサイズはどうやって決めるのですか?本番環境でメモリ不足のインスタンスを回避し、メモリ消費を削減するためのこれらの値の正しい組み合わせは何ですか?
java - java 1.8でメタスペースを強制的にクリーンアップする方法
最近、Java のバージョンを 1.6 から 1.8 にアップグレードしました。Java 1.8 に移行した後、メタスペースのメモリ消費量が時間とともに増加します (これは JConsole で観察されました)。また、Web ページにアクセスするたびに、メタスペースのサイズが増加します。そう、
Metaspace を強制的にクリーンアップする方法はありますか?
メタスペースに何が入っていて、メタスペースのサイズが大きくなっているのかを確認する方法はありますか?
メタスペースを効率的にクリーンアップする GC (SerialGC、G1、ConcMarkSweep) と、GC に使用する必要がある JVM VM 構成はどれですか?
java 1.8が正しいメタスペース操作に必要とする最小RAMは何ですか? 私の場合、ミニチュアLinuxボックスで同じ量のスワップサイズを持つ256M RAMに制限されています。
XX:MaxMetaSpaceSize を使用してメタスペース サイズを制限すると、JVM で outofmemory:metaspace 状態が発生します。
clojure - Clojure eval によりガベージ コレクタがハングする
eval を使用する遺伝的プログラミング アルゴリズムを実行すると、この問題が発生します。
問題を説明するために、次のコード フラグメントに絞り込みました。
コードを実行すると、ガベージ コレクターは作成されたすべての $eval_n クラスを一度メタスペースからアンロードしますが、2 回目のガベージ コレクター呼び出しでハングします。
jdk1.8.0_102 を次の JVM オプションとともに使用します: -XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=200m
しばらくすると、次のエラーが表示されます。
編集: VisualVM のスクリーンショットを追加して動作を示しました。JVM がハングすると、グラフは更新されなくなり、フル CPU コアを使用し続けます。
また、Java 7 (JMV オプションなし) を使用して試してみましたが、PermGen で同じ問題が発生しました。
この問題を回避する方法はありますか?
編集:
この問題は、eclipse-counterclockwise を使用して leinigen-REPL から実行した場合にのみ発生します。基本的なコマンド ライン REPL からコードを実行すると、問題は発生しません。
java - Java におけるメタスペースとネイティブ メモリの違い
メタスペースとネイティブ メモリの違いは何ですか?
メタスペースは、jconsole、jvisualvm、jstat コマンドを使用して追跡できます。
jcmdを使用してネイティブメモリを追跡できるようです。リンク
メタスペースもネイティブ メモリですか?
NIO バッファはどこに保存されますか? メタスペースまたはネイティブ メモリで?
java - メタスペースはネイティブ メモリから割り当てられますか?
Java 8 では、メタ スペースはネイティブ メモリから割り当てられますが、ネット上のどこにもアクセスできませんでした。ネイティブ メモリとは何ですか? このリンクでは、OS で使用できるメモリですが、Java の Metaspace とネイティブ メモリの違い では、ネイティブ メモリも JVM プロセスに与えられたメモリの一部として表示されます。
例: -
はいの場合、Windows OS に 15 GB の RAM がある場合を考えてみましょう。のマシンで実行されているプロセス (Java プロセス) は 1 つだけ-Xmx 4GB
です。
OSが(15-4)=11 GB
割り当てられるメタスペースメモリを最大で使用できるということですか?
java - JVM ヒープ出力のメタスペース行について
Java 8 ヒープの出力では、次のような行が表示される場合があります。
メタスペース 使用2425K、容量4498K、コミット4864K、予約1056768K
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.htmlは次の行を説明しようとします:
Metaspace で始まる行のused値は、ロードされたクラスに使用されるスペースの量です。容量の値は、現在割り当てられているチャンク内のメタデータに使用できるスペースです。コミットされた値は、チャンクに使用できるスペースの量です。予約済みの値は、メタデータ用に予約されている (必ずしもコミットされているとは限らない) スペースの量です。
繰り返しますが、上記のリンクから:
スペースは OS から要求され、チャンクに分割されます。クラスローダーは、そのチャンクからメタデータ用のスペースを割り当てます (チャンクは特定のクラスローダーにバインドされます)。
各フィールドの意味 (使用済み、容量、コミット済み、予約済み) を知りたいのですが、上記の定義を理解するのに苦労しています。
私の理解では、メタスペースは JVM プロセスの仮想アドレス空間から切り離されています。JVM は、-XX:MetaspaceSize に基づいて起動時に初期サイズを予約します。これには、文書化されていないプラットフォーム固有のデフォルトがあります。予約済みとは、メタスペースの合計サイズを指すと思います。スペースはチャンクに分割されます。各チャンクが同じサイズかどうかはわかりません。各チャンクには、1 つのクラス ローダーに関連付けられたクラス メタデータが含まれます。
容量とコミットされた音は、私にとっては空き容量のように聞こえます (リンクの定義に基づく)。メタデータはチャンク内に保存されるため、使用済み + 容量はコミット済みと等しいと思いますが、そうではありません。コミットされたということは、使用される予約済みスペースを意味するかもしれませんが、使用されたということは何を意味するのでしょうか? メタデータによって使用される使用済みスペース? では、他にどんな使い方があるでしょうか。
私の混乱を理解していただければ幸いです。定義を明確にしていただければ幸いです。