この link によると、MaxRamSizeを手動で設定してJVMがこれ以上のメモリを使用しないように制限するオプションがあります。しかし、私は同じもののドキュメントを見ていません。私はこれを知らなかった。これと似たようなものはありますか? PS。ヒープ/スタック/メタスペース/ネイティブメモリサイズを設定するつもりはありません。全体的なメモリ制限オプションがあるかどうかを知りたいだけです。
エラーになったため、試してみても役に立ちませんでした。
Improperly specified VM option 'MaxRAM=1073741824B'
Could not create the Java Virtual Machine.
A fatal exception has occurred. Program will exit.
事実によると link open-jdkにはこれらのオプションがあるようです。別の リンク ヒープサイズを設定するポイントを信じていることがわかりました。これも探していません。しかし、これはOracle向けです。
コンテナ内でアプリケーションを実行し(Dockerのように)、OOM Killerによってアプリケーションが強制終了されないようにするこの種のオプションを探しているのはなぜですか。このようなJavaアプリケーションがJava.lang.OutOfMemoryError
むしろ、終了するコンテナではありません。
私の仮定と理解は全く間違っているかもしれません。この質問もまったく間違っていて、無関係かもしれません。しかし、もちろん、尋ねることは前進の道です:)。
Java
は「B」について不平を言っていると思います。手動入力によると、Java
コマンドはk
/K
またはm
/M
またはg
/を理解しますG
サイズの接尾辞。 「B」には言及していません。
(エラーメッセージが「不明」ではなく「不適切に指定されました」ということに気づきましたか?Java
コマンドがオプションを認識したが、構文が間違っていることを示唆しています。上記を参照してください...)
Java 11のOpenJDKソースコードを見ると、 "gc_globals.hpp"ファイルで定義されているMaxRAM
パラメーターがわかります。
コンテナ内でアプリケーションを実行し(Dockerのように)、OOM Killerによってアプリケーションが強制終了されないようにするこの種のオプションを探しているのはなぜですか。
これはまさにあなたが探しているオプションです。さらに、 JDK-8170888 の一部としてcgroups
(〜docker)と適切に統合されました。このフラグは、JVMがその値よりも多くのメモリを割り当てることを妨げるものではなく、「物理RAM制限はXです。X内で割り当ててください。 Javaヒープとネイティブメモリの間の値。ただし、アプリケーションにネイティブメモリリークまたはクラスローダリークがある場合、いずれにしてもこの制限に達します。
JVMは、最後にB
を期待していないため、_MaxRAM=1073741824B
_で文句を言っています。-XX:MaxRAM=1073741824
_として宣言する必要があります。 説明 フラグのReal memory size (in bytes) used to set maximum heap size
を参照してください。
参照を見つけました
https://chriswhocodes.com/hotspot_options_jdk11.html?s=MaxRam
しかし、スティーブンCが示唆しているように、おそらくB
注:これは、デフォルトのヒープおよびダイレクトメモリの最大値を計算するために使用される最大RAMサイズです。これ以上の強制はありません。
最大ヒープサイズの設定に使用される実メモリサイズ(バイト単位)
そして別のパラメータ用
人間工学的に設定された最大ヒープサイズ(バイト単位)。 [デフォルト]ゼロは、MaxRAM * MaxRAMPercentage/100を使用することを意味します
Oracle/OpenJDKには明らかなオプションはありません。
$ Java -version -XX:+PrintFlagsFinal | grep -i MaxRAM
ただし、Linuxではulimit
を使用して最大メモリサイズを設定できますが、これに達するとJVMがハードクラッシュします。