2017-11-22 3 views
2

Javaのメモリ消費に問題があります。総メモリ制限についてJavaに正常に伝えるには?

私はJavaに次のように言ってみたいと思います:「あなたは8GBのメモリを持っていて、それを使用してください。本当にこのメモリプールにすべてのリソースを入れることができない場合にのみ失敗します。 OOM "

私は、-Xmxのようなデフォルトのパラメータがあることを知っています - ヒープのみを制限します。他にもたくさんのパラメータがあります。これらのパラメータの問題は次のとおりです。

  • これらは関係ありません。私はヒープサイズを6GBに制限したくありません(そして、ネイティブメモリは2GBを超えないと信じています)。私はすべてのメモリ(ヒープ、ネイティブ、何でも)を制限したい。そして、「-Xmx1GB」というだけでなく、効果的に行うことが安全です。

  • メモリに関連するパラメータが多すぎるため、目標を達成するためにすべてを構成する方法がわかりません。

したがって、私はそこに行き、ヒープ、パーマ、およびあらゆるタイプのメモリを気にしたくありません。私の高いレベルの期待は:8GBしかないので、いくつかのスタティックメモリが必要です。スタティックメモリを8GBから取り出し、残りのメモリを他のダイナミックメモリエンティティ間で慎重に分割します。

また、ulimitなども機能しません。私は予想よりも多くのメモリを消費すると、Javaプロセスを強制終了したくありません。私は、Javaが限界に達しないように最善を尽くすことを望んでいる。

100個のJavaパラメータを定義することもできます。 :)しかし、私は必要なパラメータ(例えば、Java 8のための)の完全なリストを手助けする必要があります。

+0

https://stackoverflow.com/questions/3513903/how-to-calculate-and-にのみ有効であることに注意してくださいjava-total-memory-space-allowed-for-java-processを指定しますか? –

答えて

0

AFAIKには、javaコマンドラインパラメータまたはそれを行うパラメータセットがありません。

ベストヒット(IMO)は、最大ヒープサイズと最大メタスペースサイズを設定することです。希望あなたのアプリケーションには他のものがかなり静的/予測可能になるでしょう。 (これは、JVMのバイナリのサイズをカバーしていないだろうし、それはおそらくネイティブライブラリをカバーしていないだろう、メモリはそう上のファイル、スタックとをマッピングされた。)

あなたが言ったコメントには:

をだから私は安全でないために大量のメモリが使われてしまいました。

ここで間違ったことを心配していると思います。アドレス空間またはスワップ領域の制限に制約されないと仮定すると、というメモリは使用されません。は重要ではありません。

アドレススペースのページが使用されていない場合、OSは(長期的には)それをスワップして、物理RAMページを別のものに与えます。

ヒープ内のページは、典型的なJavaアプリケーションではそのような状況にはなりません。 (アドレススペースのページは、GCが「スペース」内または間でオブジェクトを移動するときに、使用中とフリーの間を繰り返します。)

ただし、フリップサイドは、GC にはが必要であり、合計ヒープサイズは実際のオブジェクトの合計よりもはるかに大きくなるということです。ヒープの余りが到達可能なオブジェクトで占められすぎると、ガベージコレクションの実行間隔が短くなり、GCの人間工学に苦しみます。最悪の場合、GCで費やされた時間が100%になる傾向があるので、JVMは停止する可能性があります。醜い。 GCオーバーヘッド制限メカニズムはこれを防ぎますが、それはあなたのJVMがより早くOOMEを取得することを意味します。

ので、通常のヒープの場合には、それについて考えるための良い方法は、あなたがGCを効率的に動作できるように、「未使用」のメモリの一部を維持する必要があるということです。

+0

こんにちは。このような確認をありがとうございます。私は慎重に祈って祈っています。 :) – Ilya

0

あなたが-XX:MetaspaceSizeを試してみましたか?
これは必要なものですか?

してください、この記事をお読みください。http://karunsubramanian.com/websphere/one-important-change-in-memory-management-in-java-8/

が、これはJavaの8

+0

こんにちは。はい、私はしました。すでに述べたように、-XX:MetaspaceSizeと-Xmxを一緒に使用すると、ダイナミックメモリの割り当てが制限されます(または、少なくとも私は100%確実ではないので、少なくともそれを望みます)。しかし、私は静的な部分を正しく予測できないということです。だから私は大量のメモリを安全に使用しないようにしなければならない。 さらに、これらの2つの制限は非常にばかげています。なぜなら、ヒープのメモリがメタデータに使用されているのか、その逆であるのかは気にしないからです。 – Ilya

関連する問題